在数据库中存储模型名称并检索数据

时间:2016-06-16 08:14:23

标签: laravel eloquent laravel-5.2

我正在使用laravel 5.2,我正在建立一个网站,要求在不同的类别上有位置。我想在数据库中存储模型名称,并使用从数据库中检索的值进行获取。

我有酒店模特

-id
-name

我有餐厅模特

-id 
-name

我有位置模型

-id
-name
-latitude
-longitude
-modal_name

我想将App\Hotel存储在modal_name列中,并希望从同一模型中获取数据。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我知道的唯一方法是使用多态关系。

您应该向您的位置添加表2字段(1表示模型名称,1表示该模型上的ID键),命名约定通常是**** able_type和*** able_id 例如:locationable_typelocationable_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

祝你好运:)