LARAVEL参数1传递给...必须是数组类型,给定int

时间:2019-09-03 10:00:18

标签: php laravel

我正在尝试将条目存储到数据库中,但是出现此错误。

  

“传递给Illuminate \ Database \ Grammar :: parameterize()的参数1必须是给定int的数组类型,在C:\ xampp \ htdocs \ im-stuff \ test \ vendor \ laravel \ framework \ src中调用\ Illuminate \ Database \ Query \ Grammars \ Grammar.php在第869行“

request()->validate(['description' => 'required']);
$project->addTask(compact('description'));

好的,所以确实可以,但是下一个更好的版本不起作用。

$attributes = request()->validate(['description' => 'required']);
$project->addTask($attributes);

这是正在使用的模型。

public function tasks()
{
    return $this->hasMany(Task::class);
}

public function addTask($description)
{
    $this->tasks()->create(compact('description'));
}

这时我迷路了,真的不明白。

2 个答案:

答案 0 :(得分:1)

您应该尝试将attributes数组直接传递给create()函数,例如:

public function addTask($description)
{
    $this->tasks()->create($description);
}

Compact创建一个包含传递的变量的数组,在您的情况下:

print_r(compact('description'));
Array
(
    [description] => your_array_of_attributes
)

因此,使用compact()会将属性数组封装在另一个数组中,并为其赋予键'description'

当您想将数据传递给视图而不是编写以下代码时,compact()函数非常有用:

view('materials.index', ['materials'=>$materials, 'users'=>$users]);

您可以写:

view('materials.index', compact('materials', 'users'));

答案 1 :(得分:0)

当您将记录保存到数据库时,为什么要使用compact呢?就像我在评论中提到的那样,它应该像这样简单而简单:

public function addTask($description)
{
    $this->tasks()->create($description);
}

here,您可以找到compact

的工作原理

谢谢