Laravel Nova-两种“一对多关系”

时间:2018-12-07 10:54:14

标签: laravel laravel-5 eloquent one-to-many laravel-nova

社区

我希望从Nova的一张桌子中有两个选择。 应该可以在Laravel Nova中选择一个位置作为 start_location ,然后选择一个位置作为 end_location

我有一个活动模型/表格,其中包含开始位置结束位置

此外,我还有一个位置模型/表格。

Activities - Table
---------------------------------------------------
   id   |   start_location_id   |  end_location_id
---------------------------------------------------       
   1    |   1                   |  1
   2    |   1                   |  2


Location - Table
---------------------------------------------------
   id   |   city
---------------------------------------------------
   1    |   Berlin
   2    |   Paris

问题

如何在此处设置“多对多”关系?

我的挑战是我不确定如何将位置映射到activity.start_location_id和activity.end_location_id。

尤其是如何在Laravels Nova中选择两个位置。

可能的解决方案吗?

Activities.php(模型)

public function start_location() {
    return $this->hasOne(Location::class);
}

public function end_location() {
    return $this->hasOne(Location::class);
}

Location.php(模型)

public function start_location() {
    return $this->hasMany(Activities::class, start_location_id);
}

public function end_location() {
    return $this->hasMany(Activities::class, end_location_id);
}

Location.php-新星资源

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),
        Text::make('City'),
        BelongsToMany::make('Activities', 'location_start'), // ?
        BelongsToMany::make('Activities', 'location_end')    // ?
    ];
}

Activities.php-新星资源

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),
        Text::make('Title'),
        Trix::make('Body'),
        HasOne::make('Location', 'location_start'), // ?
        HasOne::make('Location', 'location_end'),   // ?
    ];
}

也许有更简单的方法?

提前谢谢!

0 个答案:

没有答案