首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >拉威尔:关于关系的UpdateOrCreate?

拉威尔:关于关系的UpdateOrCreate?
EN

Stack Overflow用户
提问于 2018-01-12 15:36:05
回答 4查看 15.8K关注 0票数 5

一辆用户hasOne汽车。

用户

代码语言:javascript
复制
id | name
1  | Bob
2  | Alice

cars

代码语言:javascript
复制
idMember |  color  |  energy
   1     |  blue   |    0.95

用户类中

代码语言:javascript
复制
public function car()
{
  return $this->hasOne('App\Car','idMember');
}

我想在这种关系模型上调用updateOrCreate:

代码语言:javascript
复制
$user->car()->updateOrCreate(['idMember' => $user->id], ['color' => 'red', 'energy' => '0.1']); 

但是,我得到了错误消息。

"SQLSTATE42S22:列未找到:'where子句‘中1054个未知列'id’(SQL: update cars set color = red,energy = 0.1,updated_at = 2018-01-12 15:26:47,其中id为null)

他为什么要找

id为空

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-12 15:46:57

这就是我如何解决我的问题,而不添加一个不必要的自动增量id到汽车模型:

代码语言:javascript
复制
class Car extends Model
{

  protected $primaryKey   = 'idMember';
  public    $incrementing = false;
票数 2
EN

Stack Overflow用户

发布于 2020-06-20 17:16:14

为了清楚起见,您的原始语法是正确的。您可以在关系中使用它:

代码语言:javascript
复制
$user->car()->updateOrCreate(['idMember' => $user->id], [
    'color' => 'red',
    'energy' => '0.1',
]);

这将检查是否存在带有caridMember === $user->id;如果存在,则更新colorenergy。如果没有,它将使用idMembercolorenergy创建一个color记录。

我还没有进行测试,但是根据第一个参数的数组类型,您应该能够传递多个匹配条件,例如

代码语言:javascript
复制
['idMember' => $user->id, 'day' => 'tuesday']
票数 10
EN

Stack Overflow用户

发布于 2018-01-12 15:41:09

您的汽车型号应该有一个主键,通常称为"id“。创造它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48229383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档