Платформа красноречивых отношений Laravel - PullRequest
0 голосов
/ 31 января 2019

Я создал отношения между 4 таблицами.

Это мои модели:

  • User
  • BusinessInfo
  • ElectrcityInfo
  • GasInfo

Вот основные ключи, которые я использую в своих таблицах:

  • user_id (чтобы получить логин пользователейданные из BusinessInfo)
  • contract_id (Это также существует в BusinessInfo, я использую его для получения данных из двух других таблиц для конкретных записей)

Теперь яхотите получить данные всех пользователей для входа в систему из таблицы BusinessInfo, и каждая строка BusinessInfo имеет свои собственные данные из 1 строки из ElectricityInfo и GasInfo.

Когда я использую contract_id в модели, ее даютя результат отношений null.Когда он включен user_id, отображается только 1 ElectrcityInfo со всеми записями.

Контроллер

$user = Auth::user();
$business = BusinessInfo::where('user_id', $user->id)->first();
$data = $business->electricity()->paginate(6);

return view('Pages.MySite', ['data' => $data]);

BusinessInfo Model

protected $primaryKey = 'contract_id';
public $table = "business_info";
protected $guarded = [];
public $timestamps = false;

public function electricity()
{
    return $this->belongsTo('App\Models\ElectricityInfo', 'contract_id');
}

public function gas()
{
    return $this->belongsTo('App\Models\GasInfo', 'contract_id');
}

1 Ответ

0 голосов
/ 31 января 2019

Вы BusinessInfo В модели отсутствует отношение user.Введите это в свой код:

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

Ваш запрос не верен

Когда он находится на user_id, его отображение только 1 ElectrcityInfo со всеми записями.

Это потому, что вы используете метод first(), который возвращает первый объект из коллекции.Вы должны использовать это:

$businesses = BusinessInfo::where('user_id', $user->id)->get();

Это вернет все объекты в соответствии с запросом.

Теперь вы можете зациклить массив $business и получить доступ к каждой информации

foreach($businesses as $business)
{
 $business->electricity()->first(); // this will return all your data from the BusinessInfo relation with the ElectricityInfo model
 $business->gas()->first(); // this will return all your data from the BusinessInfo relation with the GasInfo model
}

Для получения более подробной информации о методе first() и других методах нажмите здесь

Вы также можете взглянуть на раздел Eloquent: Relationships , чтобы узнать больше окак это работает

На ваш взгляд:

@foreach($businesses as $business)
{
 {{$business->electricity()->first()}}
 {{$business->gas()->first()}}
}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...