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

时间:2015-04-07 20:06:47

标签: php sql laravel eloquent

如何为下面此查询创建的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 View::make('subjects', compact(array('firstrow', 
                   'secondrow', 'thirdrow', 'fourthrow')));

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

每一行都会创建一个新变量,该变量设置为该行的唯一内容,如id值。 Psuedocode示例:

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

答案 1 :(得分:0)

您的查询将返回一组模型。您只需将其转换为数组,然后使用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);