简体   繁体   English

具有两列的同一个表上的多个关系 Laravel

[英]Multiple relationships on same table with two column Laravel

If the bookstore does not have any books in stock, this bookstore can purchase books from the other bookstore it is contracted with.如果书店没有存货,本店可以从签约的其他书店购买图书。

book_transfers table is as follows. book_transfers表如下。

ID | sender_bookstore_id | delivery_bookstore_id 
1  | 2                   | 3  
2  | 1                   | 2  
3  | 3                   | 1

books table书桌

ID | store_name  
1  | London Garden Book Store
2  | Englaland Cafe Book
3  | Domesday Book Store           

Two-column sender_bookstore_id and delivery_bookstore_id belong to the same table.两列sender_bookstore_iddelivery_bookstore_id属于同一个表。 The name of this table books.此表书籍的名称。

My Controller code is below:我的 Controller 代码如下:

$data = BookTransfer::join('books', 'books.id', '=', 'book_transfers.sender_bookstore_id')
         ->select(
             'book_transfers.*',
             'book_transfers.sender_bookstore_id as sender_id',
             'book_transfers.delivery_bookstore_id as delivery_id',
             'books.store_name as sender_store_name'
         )
         ->groupBy('book_transfers.id')
         ->get();
         return $data;

I can only get sender_store_name here.我这里只能获取sender_store_name I need to add extra code for delivery_store_name in the above controller But I don't know how to get delivery_store_name .我需要在上面的 controller 中为delivery_store_name添加额外的代码,但我不知道如何获取delivery_store_name

Best Regards,最好的祝福,

Using relation would be much more simpler.使用关系会简单得多。

// BookTransfer Model
public function sender(){
     return $this->belongsTo(Book::class, 'sender_bookstore_id');
}

public function delivery(){
     return $this->belongsTo(Book::class, 'delivery_bookstore_id ');
}

Your controller would look like this你的 controller 看起来像这样

$data = BookTransfer::with(['sender', 'delivery'])->get();

If you want to get the datas by join , you can join the same books table again, and alias it another name:如果你想通过join获取数据,你可以再次join同一个books表,并为它起另一个名字:

BookTransfer::join('books AS sender_books', 'sender_books.id', '=', 'book_transfers.sender_bookstore_id')
            ->join('books AS delivery_books', 'deliery_books.id', '=', 'book_transfers.delivery_bookstore_id')
            ->select(
                 'book_transfers.*',
                 'book_transfers.sender_bookstore_id AS sender_id',
                 'book_transfers.delivery_bookstore_id AS delivery_id',
                 'sender_books.store_name AS sender_store_name',
                 'delivery_books.store_name AS delivery_store_name'
             )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM