在Laravel 5.7模型中,我有以下课程(在这里简化):
VEHICLE.PHP
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Vehicle extends Model
{
public function journeys()
{
return $this->hasMany('App\Journey');
}
}
JOURNEY PHP
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Journey extends Model
{
public function vehicle()
{
return $this->belongsTo('App\Vehicle');
}
public function users()
{
return $this->belongsToMany('App\User');
}
}
USER.PHP
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function journeys()
{
return $this->belongsToMany('App\Journey');
}
}
我在用户和旅程之间有一个中间表(journey_user)(请参阅架构)。
我可以轻松获得特定用户的所有旅程。但是如何让特定用户使用所有车辆?由于用户和旅程之间存在多对多关系,标准的hasManyThrough方法似乎不起作用。
感谢您的帮助!
答案 0 :(得分:2)
我还没有测试过。但是,应该可以通过遍历所有%20
的{{1}},创建车辆阵列并将其返回为vehicles
来获得所有user
。>
这可以添加到您的journeys
模型控制器中:
collection
在这里,我们创建一个空数组。然后,我们遍历用户的所有过程(传递User.php
数组作为对其进行更新的参考)。
我们使用/**
* Get all vehicles which user has used
*
*/
public function vehicles()
{
$vehicles = [];
$this->journeys()
->each(function ($journey, $key) use (&$vehicles) {
$vehicles[] = $journey->vehicle;
});
return collect($vehicles);
}
收集方法来遍历每个$vehicles
。我们在each()
数组中创建一个新条目,并添加journey
。
最后,我们将所有$vehicles
作为集合返回。
我们可以像这样在应用程序中使用它:
vehicle
注意:您可以通过将函数名称更改为vehicles
将其作为访问者属性返回。这将使您可以访问User::find($id)->vehicles();
之类的车辆字段。