【问题标题】:eloquent: How to load and set model variables, inside the model itself?雄辩:如何在模型本身内部加载和设置模型变量?
【发布时间】:2016-11-10 18:34:41
【问题描述】:

Laravel 文档建议使用以下方式来建立一个 eloquent 模型:

$user = user::with($conditions)->first();

如果我想在模型本身中设置我的 eloquent 模型怎么办:

$user = new user();
$user->setup($conditions);
// class definition
class user extends Eloquent{
    public function setup($conditions){
        // load current object with table data
        // something like
        $this->where($conditions)->first();
        // previous line output is dangling, is ok to assign it to $this variable?
    }
}

【问题讨论】:

  • 你的问题不清楚。
  • 在运行第一个代码示例后,$user->id 和其他列变量是可访问的(并且很可能它们不是空的),但在第二个中 $user 是一个空对象,我该如何加载它调用setup 方法后用列变量对象化?
  • 用表数据加载当前对象,它应该知道从表中加载哪一行。那么你将如何提供这些信息。在第一个代码中,您说要从数据中加载第一行,而在第二个代码中您没有指定行。这没有多大意义。
  • setup方法中有条件输入,我还是更新了问题。

标签: php laravel model eloquent


【解决方案1】:

如果您是从 Eloquent 模型扩展而来,您可以尝试以下方法。我假设您有一个独特的 id 列。

public function setup($conditions)
{
    $model = self::with($conditions)->first();

    if (! is_null($model)) {
        $this->exists = true;
        $this->forceFill(self::find($model->id)->toArray());
    }

    return $this;
}

希望这能解决您的问题。

【讨论】:

  • 这个答案返回一个全新的对象,但它不加载当前对象。
  • 刚刚更新了我之前的解决方案,这样你的setup() 方法将加载模型数据。
  • 您的答案非常好,但我仍然希望有人提出更强大的解决方案!
猜你喜欢
  • 2021-08-11
  • 2013-05-10
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 2018-07-05
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多