#laravel #eloquent #laravel-8 #one-to-one
Вопрос:
У меня возникли некоторые проблемы с получением данных в отношениях «один к одному». У меня есть эта существующая таблица, и я хочу получить данные из rfp_details. вот мой код
//rfpmain model
protected $table = 'accounting.request_for_payment';
public function rfpDetail(){
return $this->hasOne(RfpDetail::class);
}
//rfp detail model
protected $table = 'accounting.rfp_details';
public function rfpMain(){
return $this->belongsTo(RfpMain::class);
}
//rfp controller
public function show($id)
{
$rfpMain = RfpMain::findOrFail($id);
$rd = $rfpMain->rfpDetails;
dd($rd);
}
ниже приведена структура моей существующей базы данных
Комментарии:
1. я попытался создать модель для моей существующей базы данных. моя проблема в том, когда я устанавливаю связь между этими двумя. я не могу получить данные rfp_details. я не знаю, что я сделал не так. или не разрешается вносить красноречивый вклад в существующую базу данных?
2. На самом деле проблема
typo
в том, когда вы получаете доступ к отношениям.rfpDetail
это ваше имя для отношений, но вы использовалиrfpDetails
его там, гдеs
это не нужно.3. да, спасибо, что заметили. у меня новая проблема, она возвращает пустое {}. я не знаю, связано ли это с моими моделями
Ответ №1:
вам нужно определить внешний ключ в ваших отношениях, потому что, если вы не можете его определить, он примет значение по умолчанию, которое в вашем случае отличается.
Вам нужно заменить с
public function rfpDetail(){
return $this->hasOne(RfpDetail::class);
}
Для
public function rfpDetail(){
return $this->hasOne(RfpDetail::class,'rfpid');
}
Комментарии:
1. сэр, спасибо, как насчет моего восстановления в контроллере, это правильно?
2. Да, это правильно. Если мой ответ вам полезен, пожалуйста, поддержите меня и утвердите ответ, который оценит мою работу.
3. это не работает для меня, я действительно хочу поднять этот вопрос
4. попробуйте заменить с ` $rd = $rfpMain->rfpDetails; ` на ` $rd = $rfpMain->>rfpDetails(); `
5. Неправильный метод вызова, сэр. спасибо, что помогли мне