php - Laravel Eloquent : How to store model values before saving?

标签 php laravel eloquent

我的一个模型中有一个自定义函数。它看起来像这样:

    public function newWithTeam($data, $team_id = false){

    $levels = Permissions::get_levels();

    $this->email    = $data['email'];
    $this->password = bcrypt($data['password']);
    $this->username = $data['username'];

    $this->save();

    $profile =  new Profile(['name' => $data['name'],'bio'  => $data['bio']]);
    $this->profile()->save($profile);
    }

在这里,您可以看到我存储了 email , passwordusername作为对象属性,在点击 save() 之前

相反,我想在一行中执行此操作,例如:
$this->store(['email' => $data['email], 'password' => $data['password], 'username' => $data['username']]);

$this->save();

我知道 create()方法存在,但是当我使用它时,以下行$this->profile()->save($profile);不能正常工作。我认为create()功能与 save() 不同因为某些原因! 是否有任何等效于 store()功能如上?

最佳答案

您可以使用 fill() 方法来实现你正在寻找的东西。

但是在使用它之前,您应该了解一些事情。

出于安全原因,Laravel 模型可以防止大规模分配,使用 fill() 您需要使用 来定义可以填充模型的哪些属性。 fillable guarded 特性。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserModel extends Model
{
    protected $fillable = ['email', 'password', 'username'];

    public function newWithTeam($data, $team_id = false){

        $levels = Permissions::get_levels();

        $this->fill([
            'email'    => $data['email'],
            'password' => bcrypt($data['password']),
            'username' => $data['username']
        ]);

        $this->save();

        $profile = new Profile([
            'name' => $data['name'],
            'bio' => $data['bio']
        ]);

        $this->profile()->save($profile);
    }
}

fillable 属性功能类似于批量分配的白名单。如果你想要其他方式,你可以使用 guarded 将像黑名单一样发挥作用的属性。这意味着 中列出的每一列guarded 属性(property)将无法用于批量分配,其他一切都可以,这是您的选择。

关于你的最后一条语句,如果你看一下 的实现create() 方法你会发现它接受一个普通的php数组,而 save() 方法将接受一个 Eloquent 模型实例。这就是为什么 create() 无法收到您的 $profile 多变的。

我希望这有帮助。

关于php - Laravel Eloquent : How to store model values before saving?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920589/

相关文章:

php - Laravel 4 数据库种子不起作用

php - 使用 UTF-8 编码的页面使用 UTF-8 编码将数据发送到 MySQL,但条目被打乱

Laravel 8:存储::删除(文件)返回false

php - 属于 Laravel 5 中的数据透视表

php - Laravel Eloquent 查找日期早于 2 天的行

php - Laravel/MySQL 在 where 子句中使用计算别名列

PHPUnit:从实例运行测试

PHP stream_get_contents() 从数据库读取 LOB 时表现异常

php - 如何从文件(PHP)中对数组进行排序?

Laravel Carbon - 计算数据库条目之间的时间