Как объединить три таблицы SQL в Laravel? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть 3 таблицы - сборы, отгрузки и посылки.

Вопрос 1

В коллекции имеется от одного до нескольких отправлений.В одной посылке может быть от одного до нескольких посылок.

Collections table
id
user_id

Shipments table
id
collections_id
shipment information(currently irrelevant)

Parcels table
id
shipment_id
parcelnumber

Show.blade

Как я могу отобразить их на виде лезвия следующим образом?

Вид лезвия

Вопрос 2

Create.blade

Когда пользователь добавляет новую отправку, коллекция должна быть создана, и вновь созданная партия должна быть связана с коллекцией.Как я могу назначить вновь созданный груз в коллекцию?

Мне действительно нужен совет о том, следует ли мне начинать заново и изменять сборку таблиц базы данных

Если требуется какая-либо дополнительная информация, касающаяся моделей / представлений / контроллеров, пожалуйста, дайте мне знать.

Коллекции Модель

namespace App;

use Illuminate\Database\Eloquent\Model;

class Collections extends Model
{


public function Shipments() {
    return $this->hasMany('App\Shipments');
}

public function Parcels() {
    return $this->hasManyThrough('App\Parcels','App\Shipments');
}


}

С уважением,

user3088327

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Используйте другой метод с :( "use Illuminate \ Support \ Facades \ DB;")

$combine = DB::table('collections')
          ->JOIN('shipments','collections.id,'=',shipments.collection_id')
          ->JOIN('parcels','parcels.shipments_id','=','shipments.id')
           ->SelectRaw('combines.id as chipID, ...')
          ->get();

Или: в модели (поставки):

public function Shipments() {
    return $this->belongsTo('App\collections'); //can add ->select(..)
}

public function Parcels() {
    return $this->hasMany('App\Parcels');
}

В контроллере:

$collections= Shipments::with('shipments')->with('parcels')->get();
0 голосов
/ 27 сентября 2018

Попробуйте это решение в вашей модели

public function Shipments() {
    return $this->hasOne(App\Model\Shipments:class);
}

public function Parcels() {
    return $this->hasManyThrough(App\Model\Parcels:class,App\Model\Shipments:class);
}

В лезвии

$comments = App\Model\Collection::find(1)->Shipments()->Parcels()->get();

foreach ($Shipments as $Shipment) {
    //
}
foreach ($Parcels as $Parcel) {
    //
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...