Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有多态射关系的Laravel守恒质量赋值_Php_Laravel_Eloquent_Polymorphic Associations - Fatal编程技术网

Php 具有多态射关系的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)

我正在研究Laravel中的质量分配,并尝试对一个模型及其相关模型的数据进行质量分配

我的模型: 我的意见 我有
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;
}