I have 3 tables as below:
Users Table (has only one phone):
id | Name | phone_id |
---|---|---|
1 | Sam | 1 |
2 | Tom | 2 |
/**
* @return HasOne
*/
public function phone()
{
return $this->hasOne(phones::class);
}
/**
* @return ???
*/
public function key()
{
return ???;
}
Phone Table (has only one key):
id | Name | key_id |
---|---|---|
1 | Nokia | 1 |
2 | Samsung | 2 |
/**
* @return HasOne
*/
public function key()
{
return $this->hasOne(keys::class);
}
Key Table:
id | Name |
---|---|
1 | asd123 |
2 | qwe345 |
/**
* @return belongTo
*/
public function phone()
{
return $this->belongTo(phones::class);
}
I wanted to know how to get the key from the user model:
User::find(1)->key()->Name
you need to work around hasOneThrough
to get what you need.
let's break it down, based on your schema:
User
belongs to one Phone
phone
belongs to Key
User
belongs to Key
through Phone
making this clear, we need to declare our key
relationship inside the User
model:
public function key()
{
return $this->hasOneThrough(
Key::class, // model we are trying to get
Phone::class, // model we have an _id to
'id', // WHERE `phone`.`id` = `user`.`phone_id`
'id', // `key`.`id`
'phone_id', // local column relation to our through class
'key_id' // `phone`.`key_id`
);
}
this will get you directly key
from user