繁体   English   中英

将一个查询的每一行分配一个变量

[英]Assign a variable to each row from one query

如何在下面的此查询创建的4行中为每行分配一个变量? (laravel,雄辩/流利)

 $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}}

上面仅是一个示例,因此在现实生活中,我有很多专栏文章,这就是为什么我正在寻找一种优雅的方式来解决此问题的原因。

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

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

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

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

您的查询将返回模型的集合。 您可以简单地将其转换为数组,然后使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM