Laravel关系基于JSON对象中的值

时间:2018-07-04 09:08:20

标签: php laravel

我有两个需要关联的模型,一个Users模型和一个Prices模型。在我的Prices模型中,有一个JSON object持有一个ID个用户,我想知道是否可以使用Prices与我的ID表相关Prices模型中的哪个?

我知道您可以使用getAttribute然后像这样返回用户,但是我想知道是否可以使用$this->hasOne()方法?

例如

JSON

{user_id: 1, other_values:"in the object"}

价格模型

class Prices extends Model { 

    /* Prices has the column 'object' which has the JSON object above */

    protected $casts = ['object' => 'array'];

    public function user(){
        return $this->hasOne("App\User", $this->object->user_id, "id"); /* ! Example ! */
    }
}

1 个答案:

答案 0 :(得分:3)

我创建了一个具有JSON关系的软件包:Here

由于外键在Prices模型中,因此您应该使用BelongsTo关系:

class Prices extends Model {
    use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;

    protected $casts = ['object' => 'array'];

    public function user() {
        return $this->belongsTo(User::class, 'object->user_id');
    }
}

class User extends Model  {
    use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;

    public function prices() {
       return $this->hasMany(Prices::class, 'object->user_id');
    }
}