Sous-tableau de configuration des relations du modèle Laravel

不言
Libérer: 2023-03-24 16:00:01
original
2013 Les gens l'ont consulté

Cet article vous présente principalement les informations pertinentes sur la configuration de sous-tableaux pour les relations entre les modèles Laravel. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. ça peut suivre Apprenons avec l’éditeur.

Qu'est-ce qu'Eloquent

Eloquent est un ORM, le nom complet est Object Relational Mapping, traduit par "object relational mapping" (si vous s'y référer uniquement. Il serait trop sous-estimé de le considérer comme une couche d'abstraction de bibliothèque de tableaux de couche d'abstraction de base de données). Ce qu'on appelle « l'objet » est ce que cet article appelle « Modèle » ; le mappage des relations d'objet est la relation entre les modèles. Document chinois : http://laravel-china.org/docs/eloquent#relationships

Citation

En développement actuel Sub -des bases de données et des tables sont souvent utilisées. Par exemple, la table utilisateur est divisée en 100 tables. À l'heure actuelle, l'interrogation des données nécessite la configuration de sous-tables. Par exemple, la classe Model de Laravel fournit la méthode setTable :

.

/**
 * Set the table associated with the model.
 *
 * @param string $table
 * @return $this
 */
public function setTable($table)
{
 $this->table = $table;
 
 return $this;
}
Copier après la connexion

Ensuite, pour ajouter, supprimer, modifier et interroger la table de données, vous devez d'abord créer une nouvelle instance de modèle, puis définir le nom de la table. Par exemple :

(new Circle())->setTable("t_group_" . hashID($userid, 20))
->newQuery()
->where('group_id', $request->group_id)
->update($attributes);
Copier après la connexion

C'est très simple, alors comment mettre en place des sous-tableaux lorsque la relation entre des modèles tels que HasOne, HasMany, etc. utilise cette méthode ?

Je n'ai pas trouvé de bonne solution après avoir longtemps cherché. En prenant HasOne comme exemple, j'ai regardé la méthode d'implémentation de la fonction HasOne de la classe Model Il n'y a pas de place pour mettre la table. nom, j'ai donc dû copier la méthode HasOne et la modifier. Par exemple, remplacez-le par myHasOne, ajoutez le paramètre $table pour définir le nom de la table et appelez setTable une fois l'objet instancié, et cela fonctionnera comme prévu.

Le code est le suivant :

public function detail()
{
 return $this->myHasOne(Circle::class, 'group_id', 'group_id', 't_group_' . hashID($this->userid, 20));
}
 
public function myHasOne($related, $foreignKey = null, $localKey = null, $table)
{
 $foreignKey = $foreignKey ?: $this->getForeignKey();
 
 $instance = (new $related)->setTable($table);
 
 $localKey = $localKey ?: $this->getKeyName();
 
 return new HasOne($instance->newQuery(), $this, $instance->getTable() . '.' . $foreignKey, $localKey);
}
Copier après la connexion

Je me demande si vous avez une manière plus élégante.

Recommandations associées :

Comment charger des bibliothèques de classes tierces dans Laravel

Implémentation de la fonction de recherche par le framework Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!