我正在使用laravel 5.2,我正在建立一个网站,要求在不同的类别上有位置。我想在数据库中存储模型名称,并使用从数据库中检索的值进行获取。
我有酒店模特
-id
-name
我有餐厅模特
-id
-name
我有位置模型
-id
-name
-latitude
-longitude
-modal_name
我想将App\Hotel
存储在modal_name
列中,并希望从同一模型中获取数据。
我该如何解决这个问题?
答案 0 :(得分:0)
我知道的唯一方法是使用多态关系。
您应该向您的位置添加表2字段(1表示模型名称,1表示该模型上的ID键),命名约定通常是**** able_type和*** able_id
例如:locationable_type
和locationable_id
。
而不是您的位置模型添加以下关系
class Location extends Model
{
/**
* Get all of the owning locationable models.
*/
public function locationable()
{
return $this->morphTo();
}
}
而不是你的酒店模特添加这种关系
class Hotel extends Model
{
/**
* Get the hotel location.
*/
public function location()
{
return $this->morphMany('App\Location', 'locationable');
}
}
同样适用于您的餐厅模型
class Restaurant extends Model
{
/**
* Get the restaurant location.
*/
public function location()
{
return $this->morphMany('App\Location', 'locationable');
}
}
比使用它你只需使用:
$hotel = App\Hotel::find(1);
dd($hotel->location);
有关详情,请查看laravel documentation
祝你好运:)