Laravel Eloquent найти 1-много с мутатором

Я пытаюсь представить это. У меня есть две модели.

class author extends Eloquent {
protected $table = 'authors';
public function getAuthorBioAttribute ($value)
{
// when we ask for author::find(1);
// we will get an author, but we want
// to mutate the biography of the author
// based on what the author's book
// titles are.
}

public function books () {
return $this->hasMany('Book');
}
}

Я пытаюсь найти все книги автора, а затем изменить биографическое описание автора, основываясь на том, какие книги были написаны. Когда мы назовем эту модель, потянув ее по первичному идентификатору, у меня будет скорректированное описание биографии. Однако я не уверен, как это сделать с Eloquent.

books таблица содержит внешний ключ к первичному ключу authors Таблица. Каков наилучший способ выполнить эту мутацию? Могу ли я просто назвать метод книги как $this->books() и получить массив книг на основе внешнего ключа?

РЕДАКТИРОВАТЬ:

Больше иллюстрации Я хотел бы сделать что-то вроде этого:

class author extends Eloquent {
protected $table = 'authors';
// Actually an accessor
public function getAuthorBioAttribute ($value)
{
//say $value contains "This string"$books = $this->books();
// $books now has a collection of each book object
foreach ($books as $book) {

if ($book->category == 'gardening')
str_replace($value, "string", $book->category);

}
}

public function books () {
return $this->hasMany('Book');
}
}

И тогда в моем контроллере я хотел бы использовать как таковой

public function authorBiography ($id) {

$author_stuff = author::find($id);

print_r($author_stuff->authorbio);
// say that specific author had written some books about gardening
// Output:
// "This gardening"}

0

Решение

Сначала я думаю, что вы хотите создать аксессор, а не мутатор. Вы можете получить доступ к элементам книг в цикле foreach:

public function getAuthorBioAttribute($value)
{
foreach ($this->books as $book) {
echo $book->category;
}
return "something";
}

Возможно, есть другие варианты сделать это в зависимости от вашей реализации и структуры базы данных. Вы можете получить довольно много книг, которые автор написал больше всего, а не сами книги (если в этом нет необходимости), вы также можете сохранить в таблице авторов тип книги, которую он чаще всего пишет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]