Laravel 5查询关系

时间:2015-12-18 10:32:43

标签: laravel eloquent relationship

这是关系1代码:

/**
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function address()
{
    return $this->hasMany('App\IPAddress', 'group_id');
}

和关系2代码:

/**
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function group()
{
    return $this->belongsTo('App\IPGroups');
}
  

我想获取属于指定组的所有IP地址。我不想写原始查询,我需要完成查询关系。有没有人有想法?

我试着这样做:

 /**
 * Get IP Addresses of specified group
 * @param Request $request
 * @return mixed
 */
public function getIP(Request $request)
{
    $group = IPGroups::findOrFail($request->group_id);
    return $group->address;
}
  

但是我需要添加一个where语句,我只能选择活动的ip地址。

以下是模型1代码:

    namespace App;

use Illuminate\Database\Eloquent\Model;

class IPGroups extends Model
{
    /**
     * Working Table
     * @var string
     */
    protected $table = 'ip_groups';

    /**
     * Guarded Values From Mass Assignment
     * @var array
     */
    protected $guarded = [ 'id' ];

    /**
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function address()
    {
        return $this->hasMany('App\IPAddress', 'group_id');
    }
}

和第二个型号代码:

    namespace App;

use Illuminate\Database\Eloquent\Model;

class IPAddress extends Model
{
    /**
     * Working Table
     * @var string
     */
    protected $table = 'ips';

    /**
     * Protected Values From Mass Assignment
     * @var array
     */
    protected $fillable = [ 'group_id', 'ip', 'description', 'status' ];

    /**
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function group()
    {
        return $this->belongsTo('App\IPGroups');
    }
}

1 个答案:

答案 0 :(得分:0)

尝试此选项,只获取状态为'有效':

的地址
return $group->address->where('status','Active'); 

这不起作用的原因:

return $group->address->where('status','=','Active'); 

我们在这里使用的wherewhere类的Collection,它不接受比较器作为where的第二个参数Model的做法。