首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有两列Laravel的同一表上的多个关系

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

Stack Overflow用户
提问于 2020-04-24 14:55:58
回答 2查看 53关注 0票数 0

如果书店没有存货,这家书店可以从与其签约的另一家书店购买书籍。

book_transfers表如下所示。

代码语言:javascript
复制
ID | sender_bookstore_id | delivery_bookstore_id 
1  | 2                   | 3  
2  | 1                   | 2  
3  | 3                   | 1

图书

代码语言:javascript
复制
ID | store_name  
1  | London Garden Book Store
2  | Englaland Cafe Book
3  | Domesday Book Store           

两列sender_bookstore_iddelivery_bookstore_id属于同一个表。这张桌子的名字是书。

我的控制器代码如下:

代码语言:javascript
复制
$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;

我只能让sender_store_name来这里。我需要在上面的控制器中为delivery_store_name.添加额外的代码,但是我不知道如何获得delivery_store_name

诚挚的问候,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-24 15:17:27

如果希望通过join获取数据,可以再次对同一个books表进行join,并将其别名为另一个名称:

代码语言:javascript
复制
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'
             )
票数 1
EN

Stack Overflow用户

发布于 2020-04-24 15:15:08

使用关系要简单得多。

代码语言:javascript
复制
// BookTransfer Model
public function sender(){
     return $this->belongsTo(Book::class, 'sender_bookstore_id');
}

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

你的控制器会像这样

代码语言:javascript
复制
$data = BookTransfer::with(['sender', 'delivery'])->get();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61411263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档