Besoin d'aide ?

Eloquent belongsToMany

Avatar de Yassine
Yassine

Bonjour à tous Je débute avec l'aravel et je bloque sur un point: J'ai une table Author, une table book , et une table pivot book_author(qui contient book_id et author_id) J'essaye donc de lier un book à son/ses auteurs grâce à la relation belongsToMany mais quand je fais dans la vue :

    @foreach ( $books as $book )
        <span> {{$book->title}} </br> 
        <img class ="bookimg" src= {{ $book->cover }} />
        <p class="authors">by:
            @foreach($book->authors as $author) 
                <span>{{$author->name}}</span>
            @endforeach
        </p>
    @endforeach

Ca me renvoie tous les auteurs de la DB au lieu de m'envoyer ceux reliés à un certain livre.

Voici mon modèle Book.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\Author;

class Book extends Model
{
    use HasFactory;
    protected $table = 'books';
    public $timestamps = false;
    protected $primaryKey = 'id';

    public function authors(){
        return $this->belongsToMany(Author::class, 'book_author', 'book_id');
    }

}

Author.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Author extends Model
{
    //use HasFactory;
    protected $table = 'authors';
    public $timestamps = false;
    protected $primaryKey = 'id';

    public function books() 
    {
        return $this->belongsToMany(Book::class,'book_author');
    }
}

et bookAuthor.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\Pivot;

class bookAuthor extends Pivot
{
    protected $table = 'book_author';
    public $timestamps = false;
    protected $primaryKey = ['book_id','author_id'];
    public $incrementing = false;
}

Merci pour votre aide !

Posté il y a 1 mois
Avatar de samsam
samsam

salut dans la table pivot il faut respecter l'ordre alphabétique** author_book**

Posté il y a 1 mois

Vous ne pouvez pas répondre à ce sujet.