Связывание двух таблиц через одну связанную таблицу в Eloquent - PullRequest
0 голосов
/ 06 февраля 2019

Мне, кажется, трудно понять, как правильно запрашивать, поскольку логика этого запутывается, когда я пытаюсь использовать разные операторы.

В любом случае, у меня есть три таблицы: Customer, Cpe, Equipment.Я хочу получить данные от оборудования, но для этого я должен использовать Customer для связи с Cpe, а затем связать эту таблицу с оборудованием.

Отношения таковы:

У клиента много Cpecustomerid> customerid Cpe имеет одно Оборудование equipid> equipid

Нет ничего, касающегося Клиента и Оборудования, кроме таблицы Cpe.

Я специально хочу выбрать Customer.customerid, Customer.name, Equipment.псевдоним, Customer.customerstatus, Customer.installationdate.Но я также хочу выбирать только тех клиентов, у которых Equipment.nickname LIKE% SIM%.Итак, что у меня есть:

$baicell_customers = Customer::with('Cpe')
->with('Cpe.Equipment')
->select('Customer.customerid', 'Customer.name', 
'Equipment.nickname', 'Customer.customerstatus', 
'Customer.installationdate' => function($query){
$query->where('Equipment.nickname', 'LIKE', '%SIM%');
})
->orderBy('Customer.name', 'asc');
->get();

Но это ничего не дает мне.Я не очень хорош в том, что связываю одну таблицу с другой, и в том, что мне приходится использовать связанную таблицу для получения информации от другой, это просто помешательство для меня, поэтому любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Так что я на время отказался от этого в стиле Eloquent.Это заняло некоторое время, но я смог заставить работать запрос DB :: connection ('table').Вот код:

$baicell_customers = DB::connection('azotel')->select("SELECT distinct customers.name, customers.customerid as id, customers.installationdate, customers.customerstatus[1] as status, equipment.nickname as ap FROM  cpe INNER JOIN customers on customers.customerid = cpe.customerid INNER JOIN equipment on equipment.equipid = cpe.equipid WHERE equipment.nickname LIKE '%SIM%' order by name ASC");

Это сработало отлично, как и было задумано, но пока я не могу заставить его работать в Eloquent, но пока это нормально.Если это поможет кому-нибудь понять, какой будет версия Eloquent, я все равно хотел бы ее услышать.В противном случае это было решено.

0 голосов
/ 06 февраля 2019

Это в основном много ко многим, вы сможете получить его с помощью следующего.В целом, в Laravel вы выбираете модели и что-то делаете с данными, не делайте это с выборами, если вы не находитесь в высоко ориентированной на предприятие системе.Соглашения об именах также не действуют, поскольку cpe - это сводная таблица, в основном см. Laravel От многих ко многим .

public class Customer
{
    public equipments()
    {
        return $this->belongsToMany('App\Equipment', 'INSERT CPE TABLE NAME', 'customerid', 'equipid ');
    }
}

$customer = Customer::with('equipments')->all()->first();


foreach($customer->equipments as $equipment)
{
    $equipment->nickname;
}

Даже если вы говорите, что cpe может иметь только одно оборудование, конструкция которого рассчитана на многиемногие, чтобы обойти это, вы можете сделать.

$equipment = $customer->equipments->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...