我的发票模型中存在与客户模型的BelongsTo关系。两种模型都有一个 email
字段,但 Client 存在时表示详细信息。
以下是我获取列表的方法:
$invoices = Invoice::with('client');
我在表示信息时使用$invoice->client->
。我需要将 $invoice->client->email
设置为 $invoice->email
以防找不到客户端。 ->withDefault()
方法工作正常,但我无法获取发票模型中存在的真实客户的电子邮件。
这是我的关系:
class Invoice extends Model {
/**
* Get an invoice client.
*/
public function client() {
return $this->belongsTo('App\Client', 'email', 'email')->withDefault(function ($client) {
$client->email = $invoice->email; // How can I get an invoice email?
});
}
版本:Laravel 5.5
最佳答案
您说过某些发票没有客户,并且您希望从当前模型而不是父模型发送电子邮件。在闭包中使用 $this
来访问 Invoice
模型属性:
return $this->belongsTo('App\Client', 'email', 'email')->withDefault(function ($client) {
$client->email = $this->email;
});
但它不适用于急切加载。在这种情况下,您可以使用 optional()
帮助器来完成此操作:
optional($invoice->client)->email ?? $invoice->email
或者您可以创建 an accessor在发票
模型中:
public function getAnyEmailAttribute()
{
return optional($this->client)->email ?? $this->email;
}
并使用它:
$invoice->anyEmail
关于php - Eloquent:如何在 withDefault() 闭包中访问相关模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250289/