Laravel - 将多列数据传递给选择标记标签

时间:2015-08-15 08:10:35

标签: php laravel

我按照关于Laravel的教程进行了操作,现在我的部分示例是为文章选择多个标签。所以这是一个多对多的关系。

我一直在尝试将多个数据传递到每个项目,然后将标签传递给标签的选择标签,然后是它的值。我必须显示学生的全名,但我的数据库将名称分为第一个,中间一个和最后一个。最初,这是我的控制器代码:

public function create()
{
    $students = Student::lists(['first_name', 'id');

    return view('cases.create', compact('students'));
}

然后我尝试了这个:

public function create()
{
    $students = Student::lists(['first_name', 'last_name'], 'id');

    return view('cases.create', compact('students'));
}

我收到此错误:

ErrorException in Builder.php line 1535:
strpos() expects parameter 1 to be string, array given

我认为它不允许我传递一个字符串。那么,我是否必须创建另一个变量来存储last_name然后以表格形式连接它?

1 个答案:

答案 0 :(得分:0)

如果将数组传递给它,lists方法将抛出异常。 (并且不确定传入由逗号分隔的字符串是否会在您的情况下给出预期结果,因为我无法在此上的Laravel文档中找到任何内容)。

以下应该为您提供帮助,使用all方法

$students = Students::all(['id', DB::raw('CONCAT(first_name, " ", last_name) as full_name'])->toArray();

在这里,您将在结果集中传递您需要的columns数组。 但是,在您能够在视图中使用list学生之前,您需要在您拥有的初始列表中进行一些调整以防您想要与Form::select()方法)一起使用:

$list = [];
foreach($students as $student){
     $list[$student['id']] = $student['full_name'];
}

现在,您可以将此array传递给视图并填充select元素。