eloquent 可以忽略 Laravel 5.7 中不相关的数据吗
Can eloquent ignore irrelevant data in Laravel 5.7
这基本上与 this 2013 年提出的问题相同。除了答案对我不起作用。
我有一个模型App\Post:
class Post extends Model
{
protected $fillable = ['title'];
// This Model doesn't contain an 'authorname' field
public function author()
{
return $this->belongsTo('App\Author');
}
}
和一个模特App\Author:
class Author extends Model
{
protected $fillable = ['name'];
public function posts()
{
return $this->hasMany('App\Post');
}
}
还有一个我想保存到该模型的数组:
$posts = [
['title'=>'one post', 'authorname' => 'Mickey'],
['title'=>'another post', 'authorname' => 'Minny'],
];
foreach($posts as $post){
$authorModel=App\Author::firstOrCreate(['name'=>$post['authorname']]);
App\Post::create($post)->author()->associate($authorModel)->save();
}
根据 this 问题,这应该可行,但我得到一个
SQL error 42522: Column not found: 1054 Unknown column 'authorname' in 'field list'
这表明 Laravel 将整个数组转发到 mySQL。有没有办法在不取消设置 authorname 键的情况下完成这项工作?
显然,这是我想要做的事情的简化版本,并且跟踪要取消设置的内容似乎是不必要的 - 因为将所有数组键手动分配给它们各自的数据库字段。
我唯一的想法是,您 运行 DatabaseSeeder 中的这段代码(它会自动取消保护模型),或者您在某个地方手动调用 Eloquent::unguard()
(或类似于此的代码)。这可以解释为什么在创建模型时使用任何其他字段,无论 $fillable
属性.
这基本上与 this 2013 年提出的问题相同。除了答案对我不起作用。
我有一个模型App\Post:
class Post extends Model
{
protected $fillable = ['title'];
// This Model doesn't contain an 'authorname' field
public function author()
{
return $this->belongsTo('App\Author');
}
}
和一个模特App\Author:
class Author extends Model
{
protected $fillable = ['name'];
public function posts()
{
return $this->hasMany('App\Post');
}
}
还有一个我想保存到该模型的数组:
$posts = [
['title'=>'one post', 'authorname' => 'Mickey'],
['title'=>'another post', 'authorname' => 'Minny'],
];
foreach($posts as $post){
$authorModel=App\Author::firstOrCreate(['name'=>$post['authorname']]);
App\Post::create($post)->author()->associate($authorModel)->save();
}
根据 this 问题,这应该可行,但我得到一个
SQL error 42522: Column not found: 1054 Unknown column 'authorname' in 'field list'
这表明 Laravel 将整个数组转发到 mySQL。有没有办法在不取消设置 authorname 键的情况下完成这项工作?
显然,这是我想要做的事情的简化版本,并且跟踪要取消设置的内容似乎是不必要的 - 因为将所有数组键手动分配给它们各自的数据库字段。
我唯一的想法是,您 运行 DatabaseSeeder 中的这段代码(它会自动取消保护模型),或者您在某个地方手动调用 Eloquent::unguard()
(或类似于此的代码)。这可以解释为什么在创建模型时使用任何其他字段,无论 $fillable
属性.