我正在构建一个小应用程序,我在这两个模型之间有多对多的关系:
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);
}
但是我无法检索显示相同旧值或第一个值的最新表格。 指导我如何实现这一目标。
答案 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_created_at', 'desc')->first();
是我正在使用的透视字段。