obtenir la valeur d'un tableau croisé dynamique de la colonne de laravel
J'ai un phone_models, phone_problems, et un phone_model_phone_problem tableau croisé dynamique. Le pivot de la table a une colonne "prix".
PhoneModel:
class PhoneModel extends \Eloquent
{
public function problems()
{
return $this->belongsToMany('RL\Phones\Entities\PhoneProblem')->withPivot('price');
}
}
PhoneProblem:
class PhoneProblem extends \Eloquent
{
public function models()
{
return $this->belongsToMany('PhoneModel')->withPivot('price');
}
}
Ce que j'essaie de faire est d'obtenir le prix d'un téléphone spécifique à un problème spécifique.
C'est de cette façon que j'ai maintenant, mais j'ai envie de Laravel a construit dans Éloquent fonctionnalité que je ne peux pas trouver pour ce faire, dans un moyen beaucoup plus simple:
$model = $this->phoneService->getModelFromSlug($model_slug);
$problem = $this->phoneService->getProblemFromSlug($problem_slug);
tout cela n'est à sélectionner le modèle et le type de problème de leur slug.
alors ce que je fais est avec ces informations d'identification-je obtenir le prix de la sorte:
$row = DB::table('phone_model_phone_problem')
->where('phone_model_id', '=', $model->id)
->where('phone_problem', '=', $problem->id)
->first();
alors maintenant, je peux obtenir le prix comme $row->price
mais je me sens comme il doit y avoir beaucoup plus de facilité et plus de Laravel' façon de le faire.
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de Beaucoup de Nombreuses relations avec Éloquent, le modèle qui en résulte automatiquement une
pivot
attribut affecté. Grâce à cet attribut, vous êtes en mesure d'accéder à pivot des colonnes de la table.Bien que par défaut il y a seulement les clés dans le pivot de l'objet. Pour obtenir votre colonnes là aussi, vous devez le spécifier lors de la définition de la relation:
Officiel Docs
Si vous avez besoin de plus d'aide de la tâche de configuration de la relations avec Éloquent, laissez-moi savoir.
Modifier
Pour interroger le prix ne cette
price
dans l'exemple ci-dessus$model->problems()->where('phone_problem', $problem->id)->first()->pivot->price
$model->problems()->updateExistingPivot($problemId, ['price' => $newPrice])
. Si non, pouvez-vous poser une nouvelle question, les commentaires ne sont pas vraiment le bon endroit pour cela.À obtenir de données de tableau croisé dynamique:
Ou si vous avez de nombreux enregistrements avec différents prix:
En plus.
À mise à jour données dans le tableau croisé, vous pouvez aller NOUVELLE FAÇON:
Où le 2ème paramètre est défini à false, ce qui signifie que vous ne retirez pas tous les autres modèles.
Ou, aller ancienne
Et de vous le rappeler:
À supprimer:
À créer nouveau:
Il a été testé et s'est prouvé à travailler dans Laravel 5.1 Lire la suite.
updateExistingPivot()
. Aussi, dans Laravel 5.6 au lieu de passerfalse
comme un deuxième paramètre àsync()
, il est possible d'utiliser lesyncWithoutDetaching()
fonction.