Eloquent - 如何在hasMany关系中添加连接?

时间:2016-11-22 18:30:59

标签: laravel eloquent

我有一个典型的hasMany方法:

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

但是当我使用->with('earmarks')检索它们时,如何为此关系添加连接和其他一些条件?我想补充一下:

->join('locations', 'locations.id', '=', 'earmarks.location')
->select('earmarks.*', 'locations.location AS em_location')
->orderBy('date', 'asc');

3 个答案:

答案 0 :(得分:3)

好的,我想在我的with()子句中需要一个闭包,就像这样:

    $updated_laptops = Laptop::with([
        'earmarks' => function($q) {
            $q
            ->join('locations', 'locations.id', '=', 'earmarks.location')
            ->select('earmarks.*', 'locations.location AS em_location')
            ->orderBy('date', 'asc');
        }
    ])->addJoins()->selectListCols()->find($request->IDs)->keyBy('id');

答案 1 :(得分:1)

在位置模型中定义hasMany方法时(例如 \ App \ Models \ Location.php

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

您可以在Controller中返回Location对象(例如 LocationController.php ):

public function show($id)
{
    $location = \App\Models\Location::find($id);
    return view('locations.show)
    ->with('location', $location);
}

然后在视图中(例如 locations \ show.blade.php ),您可以检索如下数据:

@foreach ($location->earmarks->sortBy('date') as $earmark )
    <p>{{ $earmark->attribute_name }}</p>
@endforeach

答案 2 :(得分:0)

这对我有用

 $('html, body').animate({ scrollTop: $(yourElement).offset().top - 20}, 800);

它可以是Labtop模型中的一个属性,并且可以像这样在Labtop json对象中可序列化:

401 No Ticket