php 非工厂创建的Laravel模型不包含数据库数据

92dk7w1h  于 2023-06-21  发布在  PHP
关注(0)|答案(2)|浏览(127)

我试图创建一个模型,将其保存在数据库中,并将关系数据附加到它。为此,我不想使用数据库工厂,因为数据库工厂对我没有提供的属性使用随机值。
我尝试了以下操作:

$user = User::create([
    'first_name' => $args['first_name'],
    'last_name' => $args['last_name'],
    'email' => $args['email'],
    'password' => \Illuminate\Support\Str::random(),
]);

$user->client()->associate($client);

dd($user->client);

这将为客户端返回null,但当我这样做时:

$user = User::factory()->create([
    'first_name' => $args['first_name'],
    'last_name' => $args['last_name'],
    'email' => $args['email'],
    'password' => \Illuminate\Support\Str::random(),
]);

$user->client()->associate($client);

dd($user->client);

确实管用。我可以在Laravel Factory类中看到,它使用store()方法来设置模型关系中的连接。这可能是为什么工厂生成的一个做实时更新和手动创建一个不?
请让我知道我如何生成一个模型,如工厂,而不使用工厂!

mf98qq94

mf98qq941#

在示例中没有显示$client。但是像文档一样在末尾添加save()

$client = Client::find($id);

$user = User::create([
    'first_name' => $args['first_name'],
    'last_name' => $args['last_name'],
    'email' => $args['email'],
    'password' => \Illuminate\Support\Str::random(),
]);

$user->client()->associate($client);

$user->save();

dd($user->client);
jhkqcmku

jhkqcmku2#

简单地说,这里有一些细节
首先,您必须在associate之后添加保存()

$user->save();

Laravel中的任何模型都有很多方法,比如保存、创建、更新、删除等等。

DB::table('table_name')->insert([data])

ModelName::create([data]);


$model = new ModelName();
$model->name = 'value';
$model->save();

它们中的每一个都依赖于模型中的不同方法,或者依赖于模型之外的不同类,比如DB
每种方法在背景中所起的作用不同。如果你使用观察者设计模式,你会发现其中一些是被观察的,并且可以使用观察者设计模式,而另一些则不能
这就是dd结果中出现在你面前的事件明显不同的原因
明显的差异在于派遣事件
我希望这能帮助你知道差异来自哪里,以避免将来出现此类问题

相关问题