gpt4 book ai didi

laravel - 有没有更好的方法来使用存储库在 Laravel 中分配 Eloquent 关系?

转载 作者:行者123 更新时间:2023-12-03 15:00:11 25 4
gpt4 key购买 nike

假设我有这两个模型 UserAccount .

哪里有User可以有多个 Accounts . (有很多)

还有一个 Account属于User . (属于)

如果我是 不是 使用 Repository 我会像这样保存模型及其关系:

    $account = new Account();
$account->username = $this->username;
$account->secret = $this->secret;
$account->user()->associate($this->user);
$account->save();

当使用 Repository 时,我看到很多人(和文章)这样做:
$accountRepository->create([
'username' => $this->username,
'secret' => $this->secret,
'user_id' => $this->user()->id,
]);

我对这种方法的问题在于 user_id因为手动分配这种关系感觉不安全,另外当其他人阅读这段代码时,他无法分辨 Account之间的关系是什么。和 User从那里!!

我目前处理这个的方式如下:(这是两种方式的结合)
    // create the account and attach the fields and the relationships
$account = new Account();
$account->username = $this->username;
$account->secret = $this->secret;
$account->user()->associate($this->user);

// save the new created model with the repository
$account = $accountRepository->create($account->toArray());

但我不确定是否有更好的方法来做到这一点!!
我只需要使用 associate功能,因为它感觉更安全,对读者来说看起来更好。并使用存储库来保存和访问我的数据。

注意:我正在使用 https://github.com/andersao/l5-repository抽象数据库层。

最佳答案

您正在设计自己的存储库,因此您可以根据需要使功能明确。不是在数据数组中传入相关的字段或对象,而是添加额外的依赖项作为额外的参数。

class AccountRepository
{
public function create($attributes, $user = null) {
$account = new Account($attributes);

if (!empty($user)) {
$account->user()->associate($user);
}

$account->save();

return $account;
}
}
现在,你可以这样调用你的函数:
$accountRepository->create([
'username' => $this->username,
'secret' => $this->secret,
], $this->user());
现在您的调用代码只知道它正在调用的函数的依赖关系。它不需要知道它们如何相关的细节,或者必须设置来关联它们的键。它只知道它的函数需要一个 User如果帐户需要一个。

关于laravel - 有没有更好的方法来使用存储库在 Laravel 中分配 Eloquent 关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com