【问题标题】:Assign a variable to each row from one query为一个查询的每一行分配一个变量
【发布时间】:2015-04-07 20:06:46
【问题描述】:

如何为下面此查询创建的 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}}

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

【问题讨论】:

  • 我猜我在 php 中使用了某种 while 循环,但我似乎无法解决。

标签: php sql laravel eloquent


【解决方案1】:

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

【讨论】:

  • 我想要单独的行的原因是我不必在视图(刀片)中引入这么多变量。例如,在我上面的代码中,subjectlists.namesubjectlists.title1 在同一行,所以我希望只分配一个变量。这只是一个示例,但在现实生活中,我有多个列名要带到视图中,因此您可以想象我需要处理的变量数量。
  • 那么您将如何访问视图中该变量的内容?我有点困惑,因为变量只能保存一个值。
  • 一个变量实际上保存了一组值。我不确定您是否使用过 laravel,但在视图中您可以访问键值对的值。因此,从上面使用一个变量的示例中,我可以在我的视图中只写{{$variable->name}}{{$variable->title1}}
  • 相信我,我已经非常习惯 Laravel。这也是一个对象而不是数组,从技术上讲,它是一个变量的 one 值。无论如何..回到问题。那么,您现在希望如何在您的视图中访问这 4 行?也许您可以将视图代码(您希望它的外观如何)添加到您的问题中?
  • 对不起,我是新手,所以我还不习惯这个术语;)。无论如何,我已经编辑了我的问题。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-05
    • 2010-10-10
    • 1970-01-01
    • 2017-02-09
    • 2013-05-03
    • 2018-03-17
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多