无法从产品表中指定“标题” - php artisan tinker

Posted

技术标签:

【中文标题】无法从产品表中指定“标题” - php artisan tinker【英文标题】:Cannot specify 'title' from product table - php artisan tinker 【发布时间】:2020-03-05 03:48:57 【问题描述】:

使用php artisan tinker,我可以提取与数据库中的第一个用户相关的产品表

>>> App\User::first()->product;
=> Illuminate\Database\Eloquent\Collection #2912
     all: [
       App\product #2898
         id: 2,
         owner_id: 2,
         title: "ListingTestTitle",
         description: "ListingTestDescription",
         price: "420.69",
         created_at: "2019-11-08 13:21:28",
         updated_at: "2019-11-08 13:21:28",
       ,
     ],
   

但是,当我尝试进一步进入这个集合并抓住标题时,我收到以下错误

>>> App\User::first()->product->title;
Exception with message 'Property [title] does not exist on this collection instance.'

无论我尝试提取哪个属性,都会遇到同样的问题。

【问题讨论】:

作为旁注,这就是为什么正确的变量命名很重要。 product 是一个单数名词,应该反映一个实例,所以让它以 Collection 的形式返回 hasMany() 是错误的。如果要使用 hasMany() 并获取多个 Product 实例,则此关系应为 products,如果要使用 hasOne()belongsTo() 并获取单个 Product 实例,则应为 product。另外,类名是StudlyCase,所以是App\Product,而不是App\product 我将致力于更好的命名约定。非常感谢您的信息 【参考方案1】:

因为product 是您的User 模型中的hasMany 关系,所以也可以从关系集合中访问第一个关系

App\User::first()->product->first()->title;

或者只是将关系更改为hasOne

希望对你有帮助

【讨论】:

【参考方案2】:
App\User::first()->product->first()->title;

【讨论】:

虽然这是正确的,但您应该花一点时间解释一下为什么他们应该使用此代码。【参考方案3】:

您可以在 User 模型中使用 hasOne 关系

App\User::first()->product->first()->title;

【讨论】:

以上是关于无法从产品表中指定“标题” - php artisan tinker的主要内容,如果未能解决你的问题,请参考以下文章

无法在mysql中指定更新、删除查询的目标表

MySQL 无法在 FROM 多个表连接中指定要更新的目标表

错误 1093:MySQL 无法在 FROM 子句中指定更新的目标表

无法运行查询给出 mySQL 错误 #1093 - 您无法在 FROM 子句中指定目标表“成员”进行更新 [重复]

Mysql 错误:1093 - 无法在 FROM 子句中指定要更新的目标表

如何重写此 MySQL 查询,使其不会引发此错误:您无法在 FROM 子句中指定目标表 'crawlLog' 进行更新?