如果我有这样的话:
$book = App\Book::with('authorInfo')->first();
如何将$ book-> authorInfo设置为新值? 我试过这样设置:
$book->authorInfo = 'test';
但它没有改变价值。
当我从我的控制器方法返回$ book时,属性authorInfo被转换为snake case。
{
book: {
author_info: null
}
}
答案 0 :(得分:4)
简短版本:您可以使用Eloquent模型提供的setRelation方法。
假设您的App\Book
模型如下所示:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
public function author()
{
return $this->belongsTo(Author::class);
}
}
您的App\Author
模型如下所示:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
public function books()
{
return $this->hasMany(Book::class);
}
}
当您获取图书并急切加载作者关系时,您可以使用Author
方法将此关系替换为setRelation
模型的新实例:
// Fetch book and load the author.
$book = App\Book::with('author')->first();
// Create a new instance of author.
$newAuthor = new App\Author;
$newAuthor->name = 'John Doe';
$newAuthor->save();
// Replace the loaded relation.
$book->setRelation('author', $newAuthor);
希望这有帮助!
答案 1 :(得分:0)
您必须指向作者,然后更改此
的名称$book->author->author = 'test';
希望这可以帮到你
或者您可以尝试直接修改属性“author_info”:$book->author_info = 'test';