Laravel 4查询内部视图

Posted

技术标签:

【中文标题】Laravel 4查询内部视图【英文标题】:Laravel 4 query inside view 【发布时间】:2013-08-19 11:05:34 【问题描述】:

在我之前的问题中,我必须执行原始 SQL 查询。

我已经在我的控制器中声明了一个公共函数:

public function deaths()

    $getdeaths = DB::statement('SELECT * FROM player_deaths ORDER BY time DESC LIMIT 10');
    return View::make('main.latestdeaths')->with('getdeaths', $getdeaths);

在检索数据时,我想显示玩家姓名,因此在 foreach 的视图中,尝试运行 SQL 查询。

        @foreach($getdeaths as $getdeath)
    <tr>
        <? $name = DB::select( DB::raw('SELECT name FROM players WHERE id = '$getdeath->player_id'') ) ?>
        <td> $getdeath->player_id </td>
        <td></td>
        <td></td>
    </tr>
    @endforeach

当我尝试回显 $name 时,变量未定义。

我可以用其他方式解析它吗?

【问题讨论】:

我最近在一个陌生的代码中看到了这个。为什么有人想从视图中查询?这很丑陋并且违反了 MVC 约定。请避免做这样的事情或习惯于开发结构化的 . . . .关于 Laravel 我不能说太多,但考虑到其他 MVC 框架,您可能对常见且遵循约定的模型关系感兴趣。聪明点。拆分逻辑。 【参考方案1】:

给你:

$getDeaths = DB::table('player_deaths')->orderBy('time','desc')->take(10)->get();
return View::make('main.latestdeaths')->with('getDeaths', $getDeaths);

这会给你一个按时间排序的所有 player_deaths 的对象。

【讨论】:

谢谢。不过,我怎样才能在视图中检索与该 SQL 查询相同的结果? 你能告诉我你的表关系吗?【参考方案2】:

您正在使用 DB::select,因此您必须执行 get() 来检索记录,顺便说一下,对视图进行 SQL 查询不好,不要尊重 MVC 架构模式。

【讨论】:

我怎样才能更好地做到这一点?在foreach中需要它,我知道它不好,但想不出更简单/更好的方法。【参考方案3】:

看看作曲家。基本上是一个过滤器或类方法,当某些视图名称被渲染并自动分配一个视图变量时会被调用。

告诉作曲家运行查询并为您希望在其中提供信息的视图设置死亡变量。

然后您可以循环访问该变量,就像您在视图中分配它一样。

【讨论】:

以上是关于Laravel 4查询内部视图的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:在视图内部调用模型函数

视图laravel内部未定义的变量

使用 Laravel 的查询构建器或 Eloquent 将一个表与一个临时表进行内部连接

Laravel View Composer 为每个视图复制 SQL 查询

Laravel 4.2 InvalidArgumentException 未找到视图

Laravel 4 - 将 json 解码到视图中