Laravel有很多通过关系

时间:2015-08-17 04:39:35

标签: php laravel

那是我的表:

countries
    id - integer
    name - string

users
    id - integer
    country_id - integer
    name - string

posts
    id - integer
    user_id - integer
    title - string

在我的情况下,我只想列出像'%keyword%'这样的国家/地区的帖子。我已经定义了国家模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
   /**
     * Get all of the posts for the country.
     */
    public function posts()
    {
        return $this->hasManyThrough('App\Post', 'App\User');
    }
}?>

现在,用户将输入国家/地区名称或帖子标题关键字来搜索帖子。我的控制器:

public function posts()
{
    $param = Input::all();

    if (isset($param['country']) && $param['country']) {
        $query = Posts::whereHas('country', function($q) use ($param) {
            $q->where('name', 'like', '%' . $param['country'] . '%');
        });
    }   
}

如何在帖子模型中定义国家/地区关系?belongsToThrough已经尝试但没有工作。很多人!

1 个答案:

答案 0 :(得分:1)

你面临的问题是“hasManyThrough”关系没有反转,即没有“belongsToThrough”这样的东西。

您可能会使用显式连接,例如

$query = Post::where('countries.name', 'like', '%' . $param['country'] .'%')
    ->join('users', 'users.id', '=', 'posts.user_id')
    ->join('countries', 'countries.id', '=', 'users.country_id')