繁体   English   中英

一个 object 的 Eloquent Model 调用get方法时再次调用构造函数

[英]An object of Eloquent Model call the constructor again when calling get method

我知道 object 的构造函数仅在创建时才第一次调用。

但就我而言,在使用xDebug调查后,我发现尽管在创建时使用$blockId参数成功调用,但当我调用get()方法获取数据时,构造函数再次被调用,这一次, $blockId参数只是一个空数组,因此会导致错误。

我用count()方法尝试了另一种情况,它就像一个魅力。

这是我上面提到的代码:

$userData = new UserData($blockId);
$results= $userData ->whereIn('Type', request('user_types'))->get(); //causes error
$results1= $userData ->whereIn('Type', request('user_types'))->count(); //works like a charm

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class UserData extends Model
{
    const TABLE_NAME  = 'user_';

    protected $table = self::TABLE_NAME;
    public $timestamps = false;
    protected $guarded = [];

    public function __construct($blockId)
    {
        parent::__construct();
        $this->table .= $blockId;
    }
}

我希望你能帮助我知道原因是什么。 提前致谢。

那是行不通的。
查询现有 model 时,引擎盖下有一个(new static)->newQuery()调用,因此您的数据丢失了。 你应该重新考虑你的流程。

get() 方法返回一个模型数组。 这意味着每个返回的数据库行都会调用构造函数。 将 $blockId 设置为可选参数,或使用带有存在检查的数据属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM