Php 具有多态射关系的Laravel守恒质量赋值
我正在研究Laravel中的质量分配,并尝试对一个模型及其相关模型的数据进行质量分配 我的模型: 我的意见 我有Php 具有多态射关系的Laravel守恒质量赋值,php,laravel,eloquent,polymorphic-associations,Php,Laravel,Eloquent,Polymorphic Associations,我正在研究Laravel中的质量分配,并尝试对一个模型及其相关模型的数据进行质量分配 我的模型: 我的意见 我有Input:all()看起来像这样,来自表单: array(6) { ["_token"]=> string(40) "irrelevant" ["title"]=> string(11) "Happy Title" ["author"]=> string(9) "Mr. Happy" ["slug"]=> string(11)
Input:all()
看起来像这样,来自表单:
array(6) {
["_token"]=>
string(40) "irrelevant"
["title"]=>
string(11) "Happy Title"
["author"]=>
string(9) "Mr. Happy"
["slug"]=>
string(11) "happy-title"
["img"]=>
string(9) "happy.png"
["content"]=>
array(1) {
[0]=>
array(2) {
["section"]=>
string(4) "body"
["rawText"]=>
string(27) "# I'm happy! ## So happy"
}}}
现在我该如何将数据实际保存为两个新的数据库行?(新闻一条,内容一条)
我想现在就这么简单了:
$news = News::create(Input::all());
$news->push();
但我显然遗漏了什么
我得到错误:preg_replace():参数不匹配,模式是字符串,而替换是数组
质量分配对相关模型根本不起作用吗
或者它工作得很好,但不适用于许多关系
我是否误解了$model->push()
,或者$model::create
提前感谢。和其他问题一样,写作和格式化给了我一些思考的时间
$input = Input::all();
$contents = Input::get('content');
unset($input['content']);
$news = News::create($input);
foreach ($contents as $c) {
$content = Content::create($c);
$news->content()->save($content);
}
$news->save();
工作!但感觉有点像黑客。还有更多的。。大规模分配相关模型的“雄辩”方式
编辑:这可能是通常正确的做法-批量分配不会处理关系,但至少我可以单独批量分配每个模型
我只需要稍微改变一下输入,一旦验证被添加到等式中,我可能无论如何都要这样做
Edit2:成功地将相关模型逻辑移动到该模型中,并保持其简单,例如:
$input = Input::all();
unset($input['content']);
$news = News::create($input);
$news = Content::updateAll($news, true);
$news->save();
对于创建,以及:
$input = Input::all();
unset($input['content']);
$news = News::find($id)->fill($input);
$news = Content::updateAll($news, false);
$news->save();
用于更新
updateAll()
方法,适用于感兴趣的任何人:
public static function updateAll($model, $create = false) {
$contents = Input::get('content');
foreach ($contents as $k => $c) {
// Save against parent model
if ($create) {
$content = Content::create($c);
} else {
$content = Content::find($k)->fill($c);
}
$model->content()->save($content);
}
return $model;
}
现在我感觉我在用全力 首先,我认为不可能大规模分配相关模型。您必须手动创建它们。另外,我认为您理解了
push
是的,但是如果质量赋值不起作用,那么push也没有任何帮助,因为它只是迭代模型的所有关系并保存它们。哦,如果不可能,那就不可能了(我太激动了,因为我要写的样板文件太少了——我想我真的必须这么做!我不知道所有的事情,但据我所知,这是不可能的。)我发现了一个很好的工作流程,一旦我不再试图强迫它这样做。。
public static function updateAll($model, $create = false) {
$contents = Input::get('content');
foreach ($contents as $k => $c) {
// Save against parent model
if ($create) {
$content = Content::create($c);
} else {
$content = Content::find($k)->fill($c);
}
$model->content()->save($content);
}
return $model;
}