Relationships Laravel OneToOne? [дублировать]
делаю друг упражнений, плюс есть но где не могу понять, почему это не работает, когда я делаю это другое имя метода. У меня есть метод в Model Location
, где он делает relationships
OneToOne
.
Когда я вызываю метод с именем, просто, он работает, но когда я вызываю метод с именем состоит он из null
.
Model Location
public function countryInverso()
{
return $this->belongsTo(Country::class);
}
Controller OneToOne
public function umPraUmReverso()
{
$location = Location::where('latitude', 54)->get()->first();
$country = $location->countryInverso;
dd($country);
}
Таким образом возвращает dd()
null
Теперь, если я ставлю таким образом
Model Location
public function country()
{
return $this->belongsTo(Country::class);
}
Controller OneToOne
public function umPraUmReverso()
{
$location = Location::where('latitude', 54)->get()->first();
$country = $location->country;
dd($country);
}
Таким ultima образом он возвращается ко мне данных, потому что имя метода countryInverso
не работает, и только с именем country
это работает?
1 answers
Давайте рассмотрим, что документации Laravel о relationships может сказать нам, чтобы решить вашу проблему.
В отношениях One-to-One
есть следующий пример:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
}
В приведенном выше примере Eloquent пытается объединить user_id
model Phone
id
model User
. Но как он это делает???
Eloquent предполагают, имя внешний ключ по умолчанию, взглянув на имя метода взаимоотношениями и только добавляет к имени метода _id
. Это означает, что внешний ключ, чтобы Elloquent, содержащиеся в таблице, Phone
в базе данных будет user_id
.
Это является причиной вашей проблемы. Ваш внешний ключ является бостона, и работает только в том случае, если метод интерфейса при вызове country. Другого имени не будет работать. В данный момент вы изменили имя метода countryInverso
Elloquent постановил, что имя ключ estrangeria было бы countryinverso_id
и в поисках такого параметра в банк, чтобы ответ был null
.
Как решить эту проблему?
Тем не менее, если ключа model Phone
не user_id, вы можете передать имя ключа, настройка в качестве второго аргумента для метода belongsTo
:
public function user()
{
return $this->belongsTo('App\User', 'foreign_key');
}
Таким образом, вы можете работать имени метода, как вы хотите, и сохранить имя внешнего ключа, как вы. Его случай был бы так:
public function countryInverso()
{
return $this->belongsTo(Country::class, 'country_id');
}