Maison > cadre php > Laravel > Explication détaillée de la façon de configurer des sous-tableaux pour les relations entre les modèles Laravel

Explication détaillée de la façon de configurer des sous-tableaux pour les relations entre les modèles Laravel

藏色散人
Libérer: 2020-04-10 13:23:32
avant
3160 Les gens l'ont consulté

Explication détaillée de la façon de configurer des sous-tableaux pour les relations entre les modèles Laravel

Dans le développement réel, des sous-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 setTable. Méthode :

Tutoriel recommandé : "tutoriel laravel"

/**
 * 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

Puis 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-tables lorsque la relation entre des modèles comme HasOne, HasMany, etc. utilise cette méthode ?

Après une longue recherche, je n'ai pas trouvé de bon moyen. En prenant HasOne comme exemple, j'ai dû copier la méthode HasOne dans la classe Model, la remplacer par myHasOne, transmettre le nom de la table. , et appelez setTable une fois que l'objet est instancié dans la fonction, c'est bien sûr possible.

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 quelqu'un a une manière plus élégante.

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:segmentfault.com
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