Laravel 5 预加载函数
Laravel 5 Eager loading with a function
我的模型 (WeeshUser) 中有一个功能,如果用户没有名字或姓氏,returns 会发送电子邮件。
// RETURN EMAIL OR NAME
public function nameOrEmail() {
$return = " - ";
// Check for first name
if ($this->first_name) {
$return = $this->first_name;
// Add lastname if exists
if ($this->last_name) {
$return .= " " . $this->last_name;
}
} elseif ($this->last_name) {
// if only lastname exists
$return = $this->last_name;
} else {
//else return email
$return = $this->email;
}
return $return;
}
我想在从控制器 ex 急切加载时调用此函数:
$weeshReturn = WeeshShare::with('sender.nameOrEmail')->get();
发件人对象是一个 WeeshUser 对象,如果 运行 这个没有 .nameOrEmail 它 运行 没问题,但是如果 运行 它像这样我得到一个错误
Call to a member function addEagerConstraints() on a non-object
这能做到吗?
您收到此错误是因为 Eloquent 假设 nameOrEmail 与 sender 相关,并期望它与 return Illuminate\Database\Eloquent\Relations\Relation
对象,但是你 return 来自它的字符串。
nameOrEmail 是 sender class 上的一个普通方法,它不会被预先加载,你已经预先加载 sender.
你可以做的是:
$weeshReturn = WeeshShare::with('sender')->get();
$weeshReturn->sender->nameOrEmail();
我的模型 (WeeshUser) 中有一个功能,如果用户没有名字或姓氏,returns 会发送电子邮件。
// RETURN EMAIL OR NAME
public function nameOrEmail() {
$return = " - ";
// Check for first name
if ($this->first_name) {
$return = $this->first_name;
// Add lastname if exists
if ($this->last_name) {
$return .= " " . $this->last_name;
}
} elseif ($this->last_name) {
// if only lastname exists
$return = $this->last_name;
} else {
//else return email
$return = $this->email;
}
return $return;
}
我想在从控制器 ex 急切加载时调用此函数:
$weeshReturn = WeeshShare::with('sender.nameOrEmail')->get();
发件人对象是一个 WeeshUser 对象,如果 运行 这个没有 .nameOrEmail 它 运行 没问题,但是如果 运行 它像这样我得到一个错误
Call to a member function addEagerConstraints() on a non-object
这能做到吗?
您收到此错误是因为 Eloquent 假设 nameOrEmail 与 sender 相关,并期望它与 return Illuminate\Database\Eloquent\Relations\Relation
对象,但是你 return 来自它的字符串。
nameOrEmail 是 sender class 上的一个普通方法,它不会被预先加载,你已经预先加载 sender.
你可以做的是:
$weeshReturn = WeeshShare::with('sender')->get();
$weeshReturn->sender->nameOrEmail();