【问题标题】:Laravel 5 passing database query from controller to viewLaravel 5 将数据库查询从控制器传递到视图
【发布时间】:2015-08-13 20:45:18
【问题描述】:

我一般是 Laravel 5 和 MVC 框架的新手。我无法从数据库查询中获取结果并将其传递给我的刀片视图。这是我的控制器功能...

public function show(Project $project)
{
$technologies = DB::select('select * from technologies where id = ?', [$project->technology_id]);
return view('projects.show', compact('project','technologies'));
}

我的看法是……

@section('content')
   <h2>{{ $project->name }}</h2>

    @if ( !technologies() )
        no technologies.
    @else
        <ul>
            @foreach( $technologies as $technology )
                <li><a href="#">{{ $technology->slug }}</a></li>
            @endforeach
        </ul>
    @endif
@endsection

感谢您的帮助

【问题讨论】:

  • 麻烦 ??什么麻烦?
  • 你试过return View::make('projects.show')-&gt;with(compact('project'))-&gt;with(compact('technologies'));吗?
  • 您不需要在查询中调用-&gt;get() 吗?
  • 感谢您的建议,但即使查看源代码,我仍然得到一个完全空白的页面。

标签: php laravel model-view-controller database-connection views


【解决方案1】:

控制器

public function show(Project $project)
{
    $technologies = DB::table('technologies')
        ->select('*')
        ->where('id', $project->technology_id)
        ->get(); // you were missing the get method

    return view('projects.show', compact('project', 'technologies'));
}

查看

这在您看来不起作用:@if ( !technologies() )

@section('content')

<h2>{{ $project->name }}</h2>
    @if($technologies)
        <ul>
            @foreach($technologies as $technology)
                <li><a href="#">{{ $technology->slug }}</a></li>
            @endforeach
        </ul>
    @else
        <p>no technologies.</p>
    @endif
@stop

另外,如果您有兴趣以更简洁的方式遍历数据或使用刀片显示“无数据”警告,请查看这篇使用刀片的 @each https://laravel-news.com/2014/09/laravel-blade/

的文章

【讨论】:

  • 感谢您提供有用的建议,但我仍然收到空白页作为回应。正确的 url 什么都没有,即使我查看源代码也是如此。我会仔细检查我的 DB 种子是否正常工作......?也许视图是问题?
  • @Scudder Stevens - 您在 routes.php 中设置的 url 路由如何?另外,您在访问 URL 后检查了错误日志吗?您也可以从视图中删除所有内容并尝试输出 &lt;p&gt;hello&lt;/p&gt; 只是为了检查它是否正在返回视图?
  • routes.php = 'Route::model('projects', 'Project'); Route::model('技术', '技术'); Route::bind('projects', function($value, $route) { return App\Project::whereSlug($value)->first(); }); Route::resource('projects', 'ProjectsController');'
  • 当我从控制器中删除 $technologies = DB 调用并从视图中删除 for each 循环时,留下'return view('projects.show', compact('project', 'technologies') );和

    {{ $project->name }}

    ' 我确实得到了项目名称。当我将数据库调用添加回控制器时,它再次返回一个空白页。
  • 我会检查的。我有时会出错,当我出错时,它们通常很长...... :) 再次感谢
【解决方案2】:

将您的查询重写为,

$technologies = DB::table('technologies')->where('id',$project->technology_id)->get();

【讨论】:

  • 感谢您的建议,但即使查看源代码,我仍然得到一个完全空白的页面。
猜你喜欢
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 2019-04-15
  • 2015-07-25
相关资源
最近更新 更多