gpt4 book ai didi

php - 如果在插入期间不在表中,Laravel Eloquent 忽略属性

转载 作者:可可西里 更新时间:2023-11-01 12:36:06 25 4
gpt4 key购买 nike

我有一个模型 Foo 对应于一个包含以下列的表格。

编号
描述
用户ID

我正在单独设置 Foo 模型的属性(没有质量分配)

$foo = new Foo;

$foo->id = 1;
$foo->description = "hello kitty";
$foo->user_id = 55;

//...

$foo 被发送到另一个类进行额外处理,但是因为那个类需要更多信息,所以我想简单地将它添加到 $foo 模型中。

//...
$foo->bar = $additional_information;

Event::fire(DoStuffWithFoo($foo));

$foo->save(); //error

问题是当我 $foo->save() 时,它提示 bar 不是一列。

我知道我可以在保存之前unset($foo->bar);,但是...

是否可以告诉 Eloquent 忽略任何不相关的属性?

最佳答案

只需将 $bar 添加为您的 foo 类中的属性:

class Foo extends Model
{

public $bar;
//...

现在您可以使用 save() 并且 Laravel 不会尝试将 bar 存储在数据库中。


解释:

如果您在模型上调用 save(),只有数组 $model->attributes 中的那些属性会被保存到数据库中。如果您将 $bar 定义为 Foo 类中的属性,则 $foo->bar ="xyz" 将永远不会在数组 $model->attributes

但是,如果您没有为 Foo 声明这样的属性,那么 __set() 会被调用,因为您 try to save something in an inaccessible property .

你可以查看 Laravel\Illuminate\Database\Eloquent\Model.php:

/**
* Dynamically set attributes on the model.
*
* @param string $key
* @param mixed $value
* @return void
*/
public function __set($key, $value)
{
$this->setAttribute($key, $value);
}

基本上调用

$this->attributes[$key] = $value;

来自 Laravel\Illuminate\Database\Eloquent\Concerns\HasAttributes.php

现在 $foo->bar ="xyz" 将在 $foo->attribute['bar'] 中结束,这就是为什么 保存() 而崩溃..此列不存在..

关于php - 如果在插入期间不在表中,Laravel Eloquent 忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36380752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com