Laravel - многие ко многим
Не работает связь многие ко многим. Не могу понять, почему?
Musics.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Musics extends Model {
protected $table = "musics";
public function authors() {
return $this->belongsToMany(Authors::class, 'authors_music', 'music_id', 'author_id');
}
}
Author.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Authors extends Model {
protected $table = "authors";
public function musics() {
return $this->belongsToMany(Musics::class, 'authors_music', 'author_id', 'music_id');
}
}
UPD: Перебор через цикл ничего не дает, возвращается пустая коллекция.
web.php
<?php
Route::get('/', function() {
$musics = Musics::all();
var_dump($musics[0]['authors']); // Для справки: $music[0]->authors выдает тот же результат
});
Получаю пустую коллекцию. По какой-то непонятной для меня причине он не хочет работать с другой таблицей.
Ответы (1 шт):
Автор решения: InDevX
→ Ссылка
// Всё логично.
$musics = Musics::all();
// $musics содержит коллекцию эл-тов
// соответственно, нужно перебирать её, чтобы посмотреть какое-либо свойство
foreach ($musics as $music) {
var_dump($music->authors);
}
// ну, или var_dump($musics[0]->authors), но тогда в чем смысл все записи брать?
// 1 запись: Musics::first()|last()|find($id) и тогда можно обращаться $musics->authors
// не забываем проблему N+1 !!! лучше всегда подтягивать связи, если они используются
$musics = Musics::with('authors')->get();