特定于php的列在嵌套加载中使用Elount

nzkunb0c  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(374)

是否有一种方法可以仅限制在laravel中嵌套加载中可以选择的列数。目前,我有3个相互关联的模型。例如,假设我们有publisher模型、authors模型和books模型。
出版商与作者有关系,作者与书的模型也有关系。
发布者模型包含以下列:
身份证件
名称
地址
传真号码
电子邮件地址
作者的模型包括:
身份证件
名称
地址
电子邮件
出版书籍
出版商
这些图书模型包括:
身份证件
标题
作者编号
发表于
类别
如果我想查看某个特定出版公司出版的书籍:这就是我获取记录的方式

$published_books::Publisher::with('authors.books')->take(1);

有了这个,我得到了这样的回答:

"id" : 1,
"name" : "Longhorn Ke",
"address" : "14th Street",
"fax number" : "null",
"email_address" : "longhorn@mail.com",
"author" :{
 "id" : 4,
 "name" : patel,
 "email" : patelguru@mail.com,
 "published_books" : 12,
 "publishers_id" : 1,
 "books" : {
  "id": 1,
  "title" : "Art of life",
  "authors_id" : 1,
  "published_on" : "2020-07-12 14:22:25",
  "category" : "Life teachings",
 }

}

我想要的是,当我通过关系加载一本书时,我只想获得出版商的名称、作者的名称和书籍的详细信息,如下所示:

"id" : 1,
"name" : "Longhorn Ke",
"author" :{
     "id" : 4,
     "name" : patel,
     "books" : {
         "id": 1,
          "title" : "Art of life",
          "authors_id" : 1,
          "published_on" : "2020-07-12 14:22:25",
          "category" : "Life teachings",
 }

}

我怎样才能用雄辩的语言做到这一点。在这一点上,我了解到eloquent允许在nester加载上选择特定的列,如本链接所示https://laravel.com/docs/master/eloquent-relationships#eager-加载特定列,但如何在所有模型中实现上述代码结果

kt06eoxx

kt06eoxx1#

对于您需要的最顶级型号 select() ; 为了你需要的关系 relationship:id,... :

$published_books = Publisher::with(['authors.books', 'authors:id,name'])
    ->select('id', 'name')
    ->take(1);

相关问题