为一个查询中的每一行分配一个变量

Assign a variable to each row from one query

如何为下面这个查询创建的 4 行中的每一行分配一个变量? (laravel, Eloquent/Fluent)

 $topics = SubjectUser::where('user_id', 8)
        ->join('subjectlists', 'subjectlists.id', '=','subjectlists_user.subjectlist_id')
        ->select('subjectlists.name', 'subjectlists.title1')->orderBy(DB::raw('RAND()'))->take(4)->get();

或者如果有人知道一种方法来检索 4 个随机单独的行而不重复,这也会有所帮助。提前致谢。

编辑:

理想情况下,我想 return 这符合我的看法

return View::make('subjects', compact(array('firstrow', 
                   'secondrow', 'thirdrow', 'fourthrow')));

所以我可以在我看来这样的事情

{{$firstrow->name}}   {{$firstrow->title1}}

以上只是一个例子,所以在现实生活中我有很多列,这就是我正在寻找解决这个问题的优雅方法的原因。

这很尴尬,但如果您需要将每一行保存在一个变量中,双美元符号可能就是您想要的:

$var = "value";   // variable is $var
$$var = "other value"; // variable is $value

每一行都将创建一个新变量,该变量设置为该行的唯一值,例如 id 值。伪代码示例:

foreach($topics as $t) {
    $id = $t.id
    $$id = $t
}

您的查询将 return 模型集合。您可以简单地将其转换为数组,然后使用 array_combine()

设置键
$topics = SubjectUser::where('user_id', 8)
        ->join('subjectlists', 'subjectlists.id', '=','subjectlists_user.subjectlist_id')
        ->select('subjectlists.name', 'subjectlists.title1')->orderBy(DB::raw('RAND()'))->take(4)->get();

$topics = $topics->all();
$variableNames = ['firstrow', 'secondrow', 'thirdrow', 'fourthrow'];
$viewVariables = array_combine($variableNames, $topics);

return View::make('subjects', $viewVariables);