Eloquent belongsToMany
Bonjour à tous Je débute avec laravel 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 !
salut dans la table pivot il faut respecter l'ordre alphabétique** author_book**
Salut, Je viens de reprendre le projet d'ou le fait que je n'ai pas vu ta réponse. Concernant la table pivot, je n'ai pas le droit de modifier son nom car ce sont les consignes du projet. J'ai quand même essayé author_book au lieu de book_author mais ça ne change rien. Je vois que eloquent n'essaye même pas d'accéder à la table pivot (pourtant nécéssaire pour la relation belongsToMany) car en mettant un faux nom de table, il n'y a pas d'exception déclenchée. Mon but final est seulement d'accéder , pour chaque livre , à son/ses auteurs. Quelqu'un aurait une idée? Mercii
Problème réglé: La clé primaire de la DB était un string et non un entier, j'ai du la spécifier avec protected $keyType = 'string';
et ça marche désormais.
Vous ne pouvez pas répondre à ce sujet.