Mic*_*rli 3 sql join filter laravel eloquent
我已经拥有什么以及我想做什么:
我有一个网站,允许用户发布自己向其他用户做广告的帖子.现在,我正在尝试为这些帖子实现过滤器,但按用户表,帖子表和其他三个中的值进行过滤.这是我遇到麻烦的地方.
有效的代码,没有过滤器:
$posts = Post::with('user','lookingfors','playstyles', 'postcomments')->orderBy('id', 'DESC')->paginate(10);
return View::make('posts/index', compact('posts'));
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的:
$posts = User::leftjoin('posts', function($join)use($region){
$join->on('users.id', '=', 'posts.user_id');
$join->on('playstyle_post.post_id', '=', 'posts.id'); // join pivot, then join pivot to playstyles
$join->on('playstyle_post.playstyle_id', '=', 'playstyles.id');
//$join->on;
})->where('users.region_id', 'like', $region)->get();
Run Code Online (Sandbox Code Playgroud)
这一个不断提出这个错误:
SQLSTATE [42S22]:列未找到:1054未知列'的条款'在'playstyle_post.post_id'(SQL:SELECT*FROM
users左联接posts上users.id=posts.user_id和playstyle_post.post_id=posts.id和playstyle_post.playstyle_id=playstyles.id其中users,region_id喜欢?)(绑定:数组(0 => 6,))
也:
$posts = Post::with('lookingfors', 'playstyles', 'postcomments')
->leftjoin('users', 'posts.user_id', '=', 'users.id')
//->join('playstyle_post', 'posts.id', '=', 'playstyle_post.post_id')
->paginate(10);
Run Code Online (Sandbox Code Playgroud)
这个很奇怪(对我来说很好),当'leftjoin'被注释掉时显然它像以前一样工作,但是当我拥有它时它现在显示它应该的视图,甚至从用户中提取所有正确的值表,但不显示通过'with'请求的任何信息.
在过去的两周里,我尝试过其他几件事,但是当他们不工作的时候我已经把它们扔了出去.这已经踢了我的屁股好半个月,我无法解决为什么我不能让它工作.
所以真的,我现在的麻烦就是试图加入表格并以雄辩的方式将它返回到视图中,这样我就能继续对待它.过滤器本身就是一个问题,但是连接起作用已经证明是困难的部分.
不要将一堆关系名称传递给with()函数,而是尝试传递数组,将键设置为关系的名称,将值设置为回调函数,并传入查询以进行实际编辑.还必须use ($region)在需要的地方使用.希望你明白了.
我举了几个例子来为每个关系添加过滤器.因为您在本地与每个人一起工作,所以您不必担心为它们添加表名或别名.
$posts = Post::with(array(
'user' => function($query) use ($region)
{
// User constraints here
$query->where('status', 'A');
$query->where('deleted', '0');
},
'lookingfors' => function($query)
{
// lookingfors constraints here
$query->where('name', 'somelookingforname');
},
'playstyles' => function($query)
{
// playstles constraints here
$query->where('name', 'someplaystylesname');
},
'postcomments' => function($query)
{
// Some postcomments constraints here
$query->where('name', 'somepostcommentsname');
}))
->orderBy('id', 'DESC')
->paginate(10);
Run Code Online (Sandbox Code Playgroud)
看看你对左连接的尝试,我不知道这些关系是否正确.我的示例假设所有关系都可以直接关联回用户表.否则,您将需要更改阵列上的键以匹配关系的方式.
例如,如果试图涉及playstyles表,但之间的关系playstyles及posts不存在,因为你需要去通过users表第一,你只需要改变'playstyles'对'users.playstyles'.
如果您发布迁移,我可以进一步帮助您.
| 归档时间: |
|
| 查看次数: |
3026 次 |
| 最近记录: |