laravel中的latest()辅助函数

时间:2017-06-15 13:58:04

标签: laravel laravel-5.4

我正在构建一个小应用程序,我在这两个模型之间有多对多的关系:

class Contact extends Model
{   
    public function company()
    {
        return $this
            ->belongsToMany('App\Company', 'company_contact', 'company_id', 'contact_id')->withTimestamps();
    }
}

现在在检索时我只想通过数据透视表中的最新模型,或者你可能会说关系表,为此我试图实现:

public function getData()
{
    $allData = Contact::all();
    foreach($allData as $data)
    {
        $getCompany = $data->company()->latest()->first();
        $data->company = $getCompany;
    }
    return response()->json(['model' => $allData], 200);
}

但是我无法检索显示相同旧值或第一个值的最新表格。 指导我如何实现这一目标。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

latest()Illuminate\Database\Query\Builder类中定义的函数。

public function latest($column = 'created_at')
{
    return $this->orderBy($column, 'desc');
} 

因此,只有orderBy,您提供的列按降序排列,默认列为created_at

OR

public function getData()
{
    $allData = Contact::all();
    foreach($allData as $data)
    {
        $getCompany = $data->company()->orderBy('created_at', 'desc')->first();
        $data->company = $getCompany;
    }
    return response()->json(['model' => $allData], 200);
}

答案 1 :(得分:0)

所以基本上想法是,如果您在此问题中找到多个关系数据,例如$data->company(),并尝试使用最新排序,则会使用created_at排序{{}对公司表进行排序1}}为了获得关系最新数据,您需要对数据透视表进行排序,即

desc

这就是我实现最新关系表的方式。

注意:您的关系中必须有透视表,在此答案中$getCompany = $data->company()->withPivot('created_at')->orderBy('pivot_cr‌​eated_at', 'desc')->first(); 是我正在使用的透视字段。