0
votes

Même clé étrangère deux fois qui fait référence à un modèle

Je dois faire une plate-forme de conseil pour les produits. L'utilisateur peut faire des conseils dans la section du produit. Donc, le produit a de nombreux conseils. Aussi conseils du produit de l'appartenance. Mais sur produit_advices em>, j'ai produit_id em> et produit_advice_id em> ces deux désignent à la table ID sur les produits. Alors voici le problème. Je peux prendre des conseils de la table de produits_advices qui fait référence à Product_ID. Mais comment puis-je emprunter l'autre comme produit. XXX PRE>

Je ne pouvais pas faire une relation avec Eloquent entre eux. P>

//Product Model
public function advices()
{
    return $this->hasMany('App\ProductAdvice', 'product_id');
}

//ProductAdvice Model
protected $table = 'product_advices';

public function product() {
    return $this->belongsTo('App\Product', 'product_id');
}

//Product Advice Table
Schema::create('product_advices', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->text('body')->nullable();
        $table->integer('product_id')->unsigned();
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
        $table->integer('product_advice_id')->unsigned();
        $table->foreign('product_advice_id')->references('id')->on('products')->onDelete('cascade');
        $table->timestamps();
    });


3 commentaires

La relation entre produit et productAdvice est correctement définie. Que voulez-vous dire par l'autre? Vous essayez d'obtenir le nom du produit dans le produit_advice?


@Eliemorin Oui, je veux prendre le nom du produit informé avec le commentaire de l'utilisateur. Publier mis à jour pour ajouter des colonnes de table.


Regardez la réponse, cela pourrait aider. Je pense que le vrai problème est où vous appelez cette fonction. Pouvez-vous nous montrer du code où vous essayez d'utiliser des conseils-> Produit-> Nom.


3 Réponses :


0
votes

Edit 2

Après votre réponse, j'ai compris ce que vous voulez. p>

Il suffit de mettre à jour votre modèle de productadvice pour avoir une autre relation, comme: p>

$advice->product->name


4 commentaires

Post mis à jour. produit_advice_id fait référence à un autre produit recommandé pour Product_ID. Chaque produit a sa propre page et l'utilisateur peut recommander un produit à un autre produit. Peut-être que cela peut être décrit comme marquage.


produit = Apple $ produit -> conseils-> message = message = message $ produit-> conseils-> produit = produit recommandé à Apple C'est ce que je veux faire.


Merci pour l'explication, je pense que je le comprends maintenant. Vérifiez ma réponse mise à jour.


Oui ça a fonctionné mais je ne pouvais pas comprendre comment le produit_advice_id y travaille même si le produit_advice_id n'existe pas sur la table des produits. Je ne pouvais pas m'en souvenir. Merci BTW :) Réponse acceptée.



0
votes

Donc, si vous comprenez bien, vous voulez et conseils du produit A pour renvoyer le nom du produit B. Vous pouvez en créer une méthode multiple liée au même modèle.

Vos modèles sembleront similaires à ce sujet: xxx

alors vous devrez créer une autre colonne dans votre Nom du talbe: like_id (cela pourrait être autre chose, il suffit de faire correspondre à votre modèle. Vous pouvez également modifier la méthode des relations () et de la relation () à n'importe quel nom que vous souhaitez.)

Après cela stocker vos données. Vous devez rendre votre code associé au bon modèle de produit dans votre produit_id et dans Catégorie_id. Par ici. Vous pouvez avoir $ conseil-> Produit-> Nom === 'iPhone' && $ conseil-> Relation-> Nom === 'Samsung S10'


0 commentaires

0
votes

a trouvé une solution comme celle-ci pour l'instant.

// productAdvice modèle p> xxx pré>

// modèle produit p> xxx pré> Comment je le montre sur View P>

@foreach($product->advices as $advice)
 <li>{{ $advice->body }} - {{ $advice->advicedProduct()->name }}</li>
@endforeach


0 commentaires