我的发票模型中有与客户模型的BelongsTo关系。两个模型都有email
字段,但客户端表示存在时的详细信息。
以下是我如何获得一份清单:
$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
答案 0 :(得分:1)
您说某些发票没有客户,您想要从当前模型发送电子邮件而不是父模式。在闭包中使用$this
来访问Invoice
模型属性:
return $this->belongsTo('App\Client', 'email', 'email')->withDefault(function ($client) {
$client->email = $this->email;
});
但它并不适用于急切的加载。在这种情况下,您可以使用optional()
帮助程序
optional($invoice->client)->email ?? $invoice->email
或者您可以在Invoice
模型中创建an accessor:
public function getAnyEmailAttribute()
{
return optional($this->client)->email ?? $this->email;
}
并使用它:
$invoice->anyEmail