首页 > 解决方案 > 关系查询NN在Laravel 6中生成空字段查询时出错

问题描述

当我尝试运行时出错$customer->competitorProduct()->where("product_id", 2)->get() 我得到一个错误不存在表中的字段“”,而在 Laravel 中检查查询类似于以下内容:

SELECT `competitor_product`.*, 
       `competitor_product_customer`.`id`          AS `pivot_id`, 
       `competitor_product_customer`.`customer_id` AS `pivot_customer_id`, 
       `competitor_product_customer`.`competitor_product_id` AS `pivot_competitor_product_id`, 
       `competitor_product_customer`.``            AS `pivot_`, 
       `competitor_product_customer`.`status`      AS `pivot_status`,
       `competitor_product_customer`.`created_at`  AS `pivot_created_at`, 
       `competitor_product_customer`.`updated_at`  AS `pivot_updated_at`

FROM   `competitor_product` 
  INNER JOIN `competitor_product_customer` 
     ON `competitor_product`.`id` = `competitor_product_customer`.`` 

WHERE `competitor_product_customer`.`customer_id` = 1 
  AND `product_id` = 2 

我与一些表有 NN 关系:

DER Image
https://i.stack.imgur.com/Zh4pV.png

产品:完整代码

<?php
...
class Product extends Model
{
    public function customers(): BelongsToMany
    {
        return $this->belongsToMany(Customer::class)
            ->using(CustomerProduct::class)
            ->as("customerProduct")
            ->withTimestamps()
            ->withPivot([
                "id",
                "customer_id",
                "product_id",
                ...
             ]);
   }

   public function competitors(): BelongsToMany
   {
        return $this->belongsToMany(Competitor::class)
            ->using(CompetitorProduct::class)
            ->as("competitorProduct")
            ->withTimestamps()
            ->withPivot([ 
              "id",
              "product_id",
              "competitor_id",
                ...
                ...
            ]);
   }
}

客户:完整代码

<?php
...
class Customer extends Model
{
    public function competitorProduct()
    {
        return $this->belongsToMany(CompetitorProduct::class)
            ->using(CompetitorProductCustomer::class)
            ->as('competitorProductCustomer')
            ->withTimestamps();
            ->withPivot([
                 'id',
                 'customer_id',
                 'competitor_product_id',
                 'status'
            ]);
    }

    public function products()
    {
        return $this->belongsToMany(Product::class)
            ->using(CustomerProduct::class)
            ->as('customerProduct')
            ->withPivot([
                'id',
                'customer_id',
                'product_id',
            ...
            ]);
    }
}

竞争对手:完整代码

<?php
...
class Competitor extends Model
{
    public function products(): BelongsToMany
    {
        return $this->belongsToMany(Product::class)
            ->using(CompetitorProduct::class)
            ->as("competitorProduct")
            ->withTimestamps()
            ->withPivot([
                "id",
                "product_id",
                "competitor_id",
                ...
            ]);
    }
}

客户产品枢纽:完整代码

<?php

namespace App\Http\Model;

use Illuminate\Database\Eloquent\Relations\Pivot;
use Illuminate\Support\Carbon;

class CustomerProduct extends Pivot
{
}

竞争对手产品枢纽:完整代码

<?php
...
class CompetitorProduct extends Pivot
{
    public function customers()
    {
        return $this->belongsToMany(Customer::class)
            ->using(CompetitorProductCustomer::class)
            ->as('competitorProductCustomer')
            ->withTimestamps();
            ->withPivot([
               'id',
               'customer_id',
               'competitor_product_id',
               'status'
            ]);
    }
}

竞争对手产品 x 客户产品 Pivot:完整代码

<?php
...
class CompetitorProductCustomer extends Pivot
{
}

我犯了一些错误,或银行关系或 Eloquent 关系

有什么解决办法吗?

标签: laraveleloquentorm

解决方案


推荐阅读