【问题标题】:Laravel save() shows undefined methodLaravel save() 显示未定义的方法
【发布时间】:2019-04-14 23:02:27
【问题描述】:

我是 Laravel 的新手,目前我遇到了一个问题。

我正在尝试将记录插入另一个数据库,但是当我尝试保存它时,它会抛出以下错误:

调用未定义的方法 Illuminate\Database\Query\Builder::save()

这是我的代码:

$targetedCustomer = Customer::on($this->connection)->where('fusercode', $user->loginname)->first();
if($targetedCustomer->agent_code != $user->agent)
{
    $targetedCustomer->agent_code = $user->agent;
    $targetedCustomer->save();

    $logs = CustomerAgentCodeUpdateLog::on($this->connection);
    $logs->customer_id =  $targetedCustomer->customer_id;
    $logs->old_agent_code = $targetedCustomer->agent_code;
    $logs->new_agent_code = $user->agent;
    $logs->type = 1;
    $logs->save();
}

【问题讨论】:

  • $logs->create(); $logs->save();
  • 首先验证$targetedCustomer不为空if($targetedCustomer != null && $targetedCustomer->agent_code != $user->agent)

标签: php laravel laravel-5


【解决方案1】:

试试这个方法:

$targetedCustomer = Customer::on($this->connection)
    ->where('fusercode', $user->loginname)
    ->first();

if($targetedCustomer and $targetedCustomer->agent_code != $user->agent)
{
    // Set agent code
    $targetedCustomer->agent_code = $user->agent;
    $targetedCustomer->save();

    // New log
    $logs                 = (new CustomerAgentCodeUpdateLog)->on($this->connection); // with `new`
    $logs->customer_id    = $targetedCustomer->customer_id;
    $logs->old_agent_code = $targetedCustomer->agent_code;
    $logs->new_agent_code = $user->agent;
    $logs->type           = 1;
    $logs->save();
}

【讨论】:

    【解决方案2】:

    Illuminate\Database\Eloquent\Model::on() 方法返回一个 Illuminate\Database\Eloquent\Builder 类的实例,它没有任何名为 save() 的方法。因此,您必须执行以下操作才能使其正常工作:

    $logs = CustomerAgentCodeUpdateLog::on($this->connection);
    
    $logs->create([
        'customer_id' =>  $targetedCustomer->customer_id;
        'old_agent_code' => $targetedCustomer->agent_code;
        'new_agent_code' => $user->agent;
        'type' => 1;
    ]);
    

    您无需致电save()

    【讨论】:

    • 嗨,当我使用 create() 时它正在工作,但内部传递的值全部变为 null 或 0(如果是整数)。我已经在模型中激活了可填充
    • @Jake 是的,因为您必须使用完整的 create($attributes) 方法语法,该语法将 $attributes 作为参数传递给它。我已经编辑了答案,现在检查一下,让我知道它是否有效。
    猜你喜欢
    • 2015-06-10
    • 2013-09-13
    • 2015-01-04
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 2018-10-16
    相关资源
    最近更新 更多