Отношения через одну модель - PullRequest
0 голосов
/ 10 марта 2020

У меня есть три таблицы - пользователи, свойства, устройства.

users
 id
 name

properties
 id
 name
 user_id

devices
 id
 name
 property_id

Как определить прямую связь с моделью пользователя из модели устройства?

class Device extends Model
{
    public function user()
    {
        return $this->....();
    }
}

Можно ли определить такое связь? Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 марта 2020

Убедитесь, что все отношения установлены в других классах.

class Property extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}
class Device extends Model
{
    public function property()
    {
        return $this->belongsTo('App\Property');
    }

    public function user()
    {
        return $this->belongsTo('App\User', null, null, 'property');
    }
}

Вы можете указать отношение в 4-м параметре метода ownTo.

0 голосов
/ 11 марта 2020

Я думаю, что нашел решение, вот чем я в конечном итоге.

class Device extends Model
{
    public function user()
    {
        $instance = new User();
        $instance->setTable('properties');
        $query = $instance->newQuery();

        return (new BelongsTo($query, $this, 'property_id', $instance->getKeyName(), 'property'))
                    ->join('users', 'users.id', '=', 'properties.user_id')
                    ->select(DB::raw('users.*')
            );
    }
}

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 10 марта 2020
   //user model
    public function role()
    {
        return $this->belongsTo('App\Role');
    }
    public function employee()
    {
        return $this->hasMany('App\Employee');
    }
   //role model
    public function users()
    {
        return $this->hasMany('App\User');
    }
    //employee model
    public function users()
    {
        return $this->belongsTo('App\User');
    }
    //value show using tinker command in command promote
     App\User::find(1)->employee;
     App\User::find(1)->role;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...