【问题标题】:Laravel 5, Filter Data Base Query using Association / Pivot tableLaravel 5,使用关联/数据透视表过滤数据库查询
【发布时间】:2015-06-06 13:42:48
【问题描述】:

我想要的是与一个项目相关的所有行业的列表。我可以获得的是每个项目使用关联表的所有行业ID。我无法弄清楚如何从这些 ID 中返回每个 Industry->Name

我的数据库中有三个表:projects、projects_industries 和行业。 “projects_industries”表包含“id”、“project_id”和“industries_id”。

以下代码返回一个空白的 html 页面。感谢您的帮助/建议!

ProjectsController

public function show(Project $project){
....$projectsindustries = DB::table('projects_industries')->select('*')->where('projects_id', $project->id)->get();
....$industries = Industry::all();
....return view('projects.show', compact('project', 'projectsindustries', 'industries'));
}

顺便说一句,我知道 $projectsindustries 数据库查询有效

刀片视图

@if($projectsindustries)
....<ul>
........@foreach($projectsindustries as $projectindustry)
............@foreach($industries as $industry)
................<li><a href="#">{{ $industry::where('id', '=', '$projectindustry->industries_id')->get()->name; }}</a></li> 
............@endforeach
........@endforeach
....</ul>
@else
....<p>no industries.</p>
@endif

【问题讨论】:

    标签: laravel laravel-5 model-associations laravel-blade


    【解决方案1】:

    这是我最终解决问题的方法...

    数据库表和字段保持不变

    项目控制器

    <?php namespace App\Http\Controllers;
    
    use DB;
    use App\Project;
    use App\ProjectIndustry;
    use App\Industry;
        public function show(Project $project)
        {
        $projectsindustries = ProjectIndustry::where('projects_id', '=', $project->id)
            ->join('industries', 'industries_id', '=', 'industries.id')->get();
    
        return view('projects.show', compact('project', 'projectsindustries'));
        }
    

    项目模型

    使用 Illuminate\Database\Eloquent\Model;

    类项目扩展模型{

    public function industries() {
        return $this->belongsToMany('Industry', 'projects_industries', 'projects_id', 'industries_id');
    }
    

    项目行业模型

    使用 Illuminate\Database\Eloquent\Model;

    类 ProjectIndustry 扩展模型 {

    protected $table = 'projects_industries';
    
    public function project()
    {
    return $this->belongsTo('Project', 'id', 'projects_id');
    }
    
    public function industry()
    {
    return $this->hasMany('Industry', 'id', 'industries_id');
    }
    

    行业模式

    <?php namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Industry extends Model {
    
        public function project()
        {
        return $this->belongsTo('Project');
        }
    
    }
    

    项目视图 projects/show.blade.php

    @if($projectsindustries)
    <h3>Industries:</h3>
        <ul>
            @foreach($projectsindustries as $projectindustry)
                <li><a href="{{ route('industries.show', $projectindustry->slug) }}">{{ $projectindustry->name }}</a></li>
            @endforeach
        </ul>
    @else
        <p>no industries.</p>
    @endif
    

    我希望这可以对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 2016-02-12
      • 2015-12-28
      • 2018-11-11
      • 2015-06-24
      • 2014-07-22
      • 1970-01-01
      相关资源
      最近更新 更多