当前位置: 首页 > 知识库问答 >
问题:

Laravel正在尝试选择关系列的以下内容

方长卿
2023-03-14

我有一个雄辩的模型App\list,它属于App\Product

public function product()
{
    return $this->belongsTo(Product::class);
}

在Listing Controller中,我试图从产品表中获取一个包含两列(namekeywords)的特定列表。

public function readListing(Request $request, $listingId)
{
    $query = Listing::query();
    $item = $query->with(['product' => function (Builder $query) {
        return $query->select(['name', 'keywords']);
    }])->findOrFail($listingId);
    return response()->json($item->toArray(), 200);
}

我得到这个错误:

传递给App\Http\Controller\API\ListingController::App\Http\Controller\API{闭包}()的TypeError Argument 1必须是Illumate\Database\Eloquent\Builder的实例,Illumate\Database\Eloquent\关系\BelongsTo给定的实例,在...中调用...uilder.php580号线

580号线在哪里

$item = $query->with(['product' => function (Builder $query) {

当我像这样从行中删除类型声明时

$item = $query->with(['product' => function ($query) {

我得到一个结果,但它不包括product表中的两列(namekeywords)。

{
    id: 1,
    product_id: 1,
    listing_price: 10,
    actual_price: 5,
    in_stock: 1,
    listing_date: null,
    delisting_date: null,
    created_at: "2021-02-24T12:33:48.000000Z",
    updated_at: "2021-02-24T13:45:25.000000Z",
    deleted_at: null,
    category: "Fruits",
    category_id: 2,
    description: "Rem laudantium aut",
    image_urls: [
        ".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd.jpg",
        ".../storage/products/February2021/oBtXf5kBjkAyrazuFDyu.jpg",
        ".../storage/products/February2021/GfpaGxSoGLA2FBqGrcDX.jpg"
    ],
    image_medium_urls: [
        ".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd-medium.jpg",
        ".../storage/products/February2021/oBtXf5kBjkAyrazuFDyu-medium.jpg",
        ".../storage/products/February2021/GfpaGxSoGLA2FBqGrcDX-medium.jpg"
    ],
    image_small_urls: [
        ".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd-small.jpg",
        ".../storage/products/February2021/oBtXf5kBjkAyrazuFDyu-small.jpg",
        ".../storage/products/February2021/GfpaGxSoGLA2FBqGrcDX-small.jpg"
    ],
    thumbnail_url: ".../storage/products/February2021/CF3nzhmc0RXevSWdOJcd-small.jpg",
    product: null
}

为什么类型声明会导致问题,如何让它从相关表中选择这两列?


共有1个答案

唐信瑞
2023-03-14

您需要在案例中包含foreign_keylisting_id

    $query = Listing::with(['product' => function ($query) {
    // add listing_id
        return $query->select(['listing_id', 'name', 'keywords']);
    }])
        ->findOrFail($listingId);

这一点在laravel文档中有所提及

使用此功能时,应始终在要检索的列列表中包含id列和任何相关外键列。

 类似资料:
  • 我试图编写一个查询,它从模型中选择列,然后从关系表中选择一列。 如何从此查询中的关系表中获取列?

  • 奇怪的是,使用preverse,它试图从另一个表中选择一个复选框。下面是我使用前面的“开发工具”中突出显示的HTML: 我可以使用什么XPATH?

  • 我有三种型号:发票、发票项和产品。 每个发票都与Invoiceitems模型有许多关系。 每个发票项目与产品模型有一个关系。 我需要计算产品类别为4的Invoiceitem产品金额的总和。 表结构 发票 id |日期|总金额| 发票项目 id|发票|product_id|product_amt|数量|total_amt 产品 ID|product_name|category_id 关系 发票模型

  • 我想显示“users”表中两个指定列“first_name”和“pic”的所有值。我正在尝试“Pulk”,但它在echo时显示为json格式。但我需要展示给大家看,一些东西——‘John pic’。求求你,有人帮帮我。这是我在“索引”中的示例代码。刀身php的吼声-

  • 问题内容: 我创建了一个客户c#DropDownList控件,可以将其内容呈现为optgroup(不是从头开始,我编辑了一些在Internet上找到的代码,尽管我确切地了解了它的作用),并且工作正常。 但是,我现在遇到一种情况,我需要在下拉菜单中有两个缩进级别,即 但是,在上面的示例代码段中,它呈现的缩进量与相同。 有没有一种方法可以产生我想要的嵌套optgroup行为? 问题答案: 好的,如果有