php - 在 Laravel 关系查询中调用未定义函数
问题描述
由于我将有许多搜索过滤器,因此我将按照如下所示的方式构建它们。我已经展示了一个过滤器(用于帖子),因为那是一个引发错误的过滤器。
用户模型
public function posts()
{
return $this->morphToMany('App\Post', 'postable');
}
用户控制器
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class UserController extends Controller
{
public function searchPage(Request $request, User $user)
{
$user = $user->newQuery();
if ($request->has('post'))
$user->posts()->where('id', $request->input('post'));
return $user->get();
}
}
我明白了:虽然我认为根据文档Call to undefined method Illuminate\Database\Eloquent\Builder::posts()
应该这样做。
解决方案
newQuery()
将返回查询生成器的一个实例。你不能在此之上建立关系。
public function searchPage(Request $request, User $user)
{
// newQuery returns an instance of Query Builder
// You can't chain relationships on the Query Builder
$user = $user->newQuery();
// You want an instance of the User model here.
// This is just an example
$user = \App\User::find($request->id);
// If you are already passing in the user model
// you can just use it as it is. No need to do
if ($request->has('post')) {
$user->posts()->where('id', $request->input('post'));
}
return $user->get();
}
推荐阅读
- node.js - 如何在 node.js 中使用cheerio 从 url 中抓取数据
- c# - 在 ASP.Net MVC 中的非控制器方法中从 MemoryStream 数据中下载 Excel
- laravel - 将数据从控制器传递到 Laravel 中的视图 - 显示错误消息 Undefined variable
- python - 在 Django 中迭代大型查询集时调用模型方法的最佳方式
- c++ - 尾递归优化适用于 std::cout 中的 "\n" 但不适用于 '\n'
- git - 使用 Google 地球修改 .kml 时,如何有效地跟踪其更改?
- jenkins - 在 headed 模式下执行 cypress 规范时,Jenkins 不会启动浏览器
- ios - iOS:使用“AVSampleBufferAudioRenderer”时音频停止播放时收到通知
- thymeleaf - Thymeleaf 在使用 th:field 时在表单上显示 null?
- excel-formula - 如何将Excel中行的元素数量加倍?