У меня есть 2 модели с отношением «многие ко многим». Я хочу, чтобы иметь возможность установить определенный атрибут с массивом идентификаторов и сделать отношения в мутатором так:Laravel сохранить отношения «многие ко многим» в «Красноречивых мутаторах»
<?php
class Profile extends Eloquent {
protected $fillable = [ 'name', 'photo', 'tags' ];
protected $appends = [ 'tags' ];
public function getTagsAttribute()
{
$tag_ids = [];
$tags = $this->tags()->get([ 'tag_id' ]);
foreach ($tags as $tag) {
$tag_ids[] = $tag->tag_id;
}
return $tag_ids;
}
public function setTagsAttribute($tag_ids)
{
foreach ($tag_ids as $tag_id) {
$this->tags()->attach($tag_id);
}
}
public function tags()
{
return $this->belongsToMany('Tag');
}
}
<?php
class Tag extends Eloquent {
protected $fillable = [ 'title' ];
protected $appends = [ 'profiles' ];
public function getProfilesAttribute()
{
$profile_ids = [];
$profiles = $this->profiles()->get([ 'profile_id' ]);
foreach ($profiles as $profile) {
$profile_ids[] = $profile->profile_id;
}
return $profile_ids;
}
public function profiles()
{
return $this->belongsToMany('Profile');
}
}
Однако функция setTagsAttribute
не работает, как ожидалось. Я получаю следующее сообщение об ошибке: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'profile_id' cannot be null (SQL: insert into
profile_tag (
profile_id ,
tag_id ) values (?, ?)) (Bindings: array (0 => NULL, 1 => 1,))
А, я вижу. Я надеялся, что смогу использовать функции mutator для установки отношений на своих моделях без необходимости писать код вручную все время. –