Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩的模型关系不返回子关系特定的列值_Php_Mysql_Laravel_Eloquent_Eloquent Relationship - Fatal编程技术网

Php 雄辩的模型关系不返回子关系特定的列值

Php 雄辩的模型关系不返回子关系特定的列值,php,mysql,laravel,eloquent,eloquent-relationship,Php,Mysql,Laravel,Eloquent,Eloquent Relationship,我曾尝试在产品名等于Oops时获取用户信息和产品详细信息,其中指定了昵称和名称,但我不知道getProducts为什么不返回任何东西 用户模型 public function getProducts(){ return $this->hasMany('App\Models\Product','users_id'); } 产品模型 public function users(){ return $this->belongsTo(User::c

我曾尝试在产品名等于Oops时获取用户信息和产品详细信息,其中指定了昵称和名称,但我不知道getProducts为什么不返回任何东西

用户模型

 public function getProducts(){
        return $this->hasMany('App\Models\Product','users_id');
    }
产品模型

public function users(){
        return $this->belongsTo(User::class);
    }
提取数据的代码:

$products = User::with(['getProducts' => function($query){
            $query->select("users_id","name","nickname");
        }])->get();
电流输出:

"data": [
    {
      "id": 1,
      "name": "John Smith",
      "email": "john.smith@hotmail.com",
      "email_verified_at": null,
      "created_at": "2021-04-08T13:29:13.000000Z",
      "updated_at": "2021-04-08T13:29:13.000000Z",
      "role": 0,
      "get_products": [
        
      ]
    },
    {
      "id": 2,
      "name": "Kelvin Ooi",
      "email": "kelvin.ooi@hotmail.com",
      "email_verified_at": null,
      "created_at": "2021-04-08T13:29:13.000000Z",
      "updated_at": "2021-04-13T12:07:11.000000Z",
      "role": 1,
      "get_products": [
            {
                "nickname":"MCD",
                "name":"Oops"
            },
            {
                "nickname":"Mary Brown",
                "name":"Oops"
            },
            {
                "nickname":"Kentucy",
                "name":"KFC"
            },
            {
                "nickname":"Texas Chicken",
                "name":"TXS"
            }            
      ]
    }
  ]
预期产出

"data": [
    {
      "id": 1,
      "name": "John Smith",
      "email": "john.smith@hotmail.com",
      "email_verified_at": null,
      "created_at": "2021-04-08T13:29:13.000000Z",
      "updated_at": "2021-04-08T13:29:13.000000Z",
      "role": 0,
      "get_products": [
        
      ]
    },
    {
      "id": 2,
      "name": "Kelvin Ooi",
      "email": "kelvin.ooi@hotmail.com",
      "email_verified_at": null,
      "created_at": "2021-04-08T13:29:13.000000Z",
      "updated_at": "2021-04-13T12:07:11.000000Z",
      "role": 1,
      "get_products": [
            {
                "nickname":"MCD",
                "name":"Oops"
            },
            {
                "nickname":"Mary Brown",
                "name":"Oops"
            }
      ]
    }
  ]
getProducts并不是这种关系的好名字,让我们简单地称之为products

公共功能产品 { return$this->hasmall'App\Models\Product'、'users\u id'; } 注释中的代码不起作用,因为您在主查询中指定了where子句,而不是子查询

返回用户::使用['products'=>函数$query{ $query->selectusers\u id、name、昵称; }] //这必须在子查询中。 ->whereproducts.name,Oops ->得到; 因此,让我们将您的代码更新为:

$productName='Oops'; 返回用户::使用['products'=>函数$query use$productName{ $query->selectusers\u id、name、昵称、price ->其中名称,如%{$productName}%; }] ->得到; 我已经看到你对这个答案的评论。让我们为用户模型定义一个总数:

类用户扩展模型 { 受保护的$appends=['total']; 公共函数getTotalAttribute { //这是更高阶的消息,如果您没有使用它:https://laravel.com/docs/8.x/collectionshigher-order-messages 返回$this->products->sum->price; } }
然后total属性将成为任何用户的一部分。

我认为您需要将user\u id包含在外键中,因此$query->select'user\u id',name',昵称';,否则它不知道如何加载它们。我已经检查了我的数据库已经有外键关系,但它仍然不工作..如果我想使用['getProducts'=>function$query{$query->selectusers\u id,name,昵称;}]->whereproducts.name,拉取产品名为Oops$products=user::的用户,该怎么办,Oops->get;但是它不起作用..所以我只是用我的本地模型/关系测试了你的代码,它起作用了:Model::with['relationship'=>function$q{$q->select'id',relationship_id',column';}]->find1;这将返回ID为1的模型,并记录与这3列的关系。你的代码应该是一样的……如果我想对产品价格求和并显示如图所示的产品详细信息,该怎么办:在最终获取之前,我试图将产品中的->addSelectDB::rawSELECT SUMp.price添加为p,其中p.id=products.id,但它仍然会抛出一个错误。@MiracleHades这行不通。主查询不知道products表。with方法内的查询是主查询的单独查询。我已经更新了我的答案。除此之外,如果我想从模型实例中选择id、email和name作为fullname。我曾尝试在使用之前使用Pull,但我没有运气让它起作用。我遇到了另一个问题,我不知道为什么产品系列仍然跟随我,而我甚至没有包括“产品”。可执行代码是$ttl=User::find1->first;它应该只返回普通用户集合,而不是用户混合产品集合。。。