Laravel 基于关系获取数据

时间:2020-12-19 07:37:38

标签: php laravel

所以我有两个表,Bids 表和 Projects 表。他们之间的关系是这样的:

Bids.php:

public function projects()
  {
        return $this->belongsTo('App\Projects');
  }
    

Projects.php:

public function bids()
{
    return $this->hasMany('App\Bids');
}

这是 Projects table。这是Bids table。我想在 View 的每一行表中打印所有投标数据及其各自的项目数据。 我试图在我的控制器中这样做:

$bids= auth()->user()->bids()->get();
   foreach($bids as $bid)
   {
        $projects= Projects::find($bid->project_id);
   }
    return view('bids.index',compact('bids','projects'));

索引视图:

 @if($bids->count() != 0)
           @foreach($bids as $bid)                      
            <tr>
            <td><a href="{{ route('projects.select',$projects->id) }}">{{$projects->name}}</a></td>
             <td>{{$bid->status}}</td>
             </tr> 
             @endforeach
                                
             @else
             <tr>
             <td colspan="6" class="text-center">No record found.</td>
             </tr>
             @endif

但是我在表格的一行中重复了数据。那么正确的做法应该是什么呢?对不起,如果这有点模糊,但这是我抽象解释它的最佳方式。

1 个答案:

答案 0 :(得分:1)

您没有使用您在此处定义的关系。

$bids = auth()->user()->bids()->with('project')->get();

这将预先加载每个出价的 project 关系。

我真的不知道您希望它在视图中看起来如何,但您可以非常简单地迭代出价并获取项目信息:

@foreach ($bids as $bid)
    {{ $bid->id }}
    {{ $bid->project->name ?? '' }}
@endforeach

附注:

您的 Projects 模型应该是 Project,模型以单数命名,数据库表以复数命名。你的关系应该是 project 而不是 projects 因为它是一个单一的关系,属于;它只能返回一条记录或 null