#php #laravel #eloquent #eloquent-relationship
#php #ларавель #красноречивый #красноречивое-отношение
Вопрос:
У меня есть 2 таблицы в моей базе данных, и я попытался получить данные из них, это моя схема базы данных :
--------------- ---------------
| pg | | phone |
=============== ===============
| id | | id |
| name | | telp |
| address | | pg_id |
=============== ===============
телефонный стол принадлежит pg, у меня есть такая модель pg :
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Pg extends Model{
protected $table = "pg";
public function telepon(){
return $this->hasOne('AppModelsPhone', 'pg_id', 'id');
}
}
а это моя модель телефона :
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Phone extends Model{
protected $table = "phone";
public function pg(){
return $this->belongsTo('AppModelsPg', 'pg_id', 'id');
}
}
Это мой код внутри контроллера для получения данных :
$pg = Pg::find(1);
return view('inpform', ['data' => $pg]);
внутри моего представления я сбрасываю данные, но результат был НУЛЕВЫМ, если я изменю код на :
$pg = Pg::all();
return view('inpform', ['data' => $pg]);
он показывает данные только из таблицы pg, мне нужна связь между ними.
Комментарии:
1.
$pg = Pg::with('telepon')->find(1);
или$pg = Pg::with('telepon')->get();
laravel.com/docs/8.x/eloquent-relationships#eager-loading2. это работает, спасибо, но могу ли я использовать это ниже laravel 8. *?
3. Это основная функция laravel с самого начала.
4. спасибо, это работает, надеюсь, вы опубликуете это как ответ, чтобы я мог установить это как правильный ответ.
Ответ №1:
Вы определили связи, но это не означает автоматически, что они будут связаны с моделью. У вас есть два варианта для быстрой загрузки этих отношений. Вы можете изменить код своего контроллера, чтобы запросить загрузку отношений:
$pg = Pg::with('telepon')->find(1);
// or
$pg = Pg::with('telepon')->get();
Или, если вам всегда будут нужны эти данные, вы можете добавить их в свойство модели $with
.
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Pg extends Model
{
protected $table = "pg";
public function telepon()
{
return $this->hasOne(Phone::class);
}
/**
* The relationships that should always be loaded.
*
* @var array
*/
protected $with = ['telepon'];
}
Это приведет к тому, что связь будет загружаться каждый раз, когда вы обращаетесь к каким-либо Pg
моделям.
Комментарии:
1. Спасибо, я очень ценю вашу помощь. Я новичок в качестве пользователя laravel.