2015-12-18 7 views
1

Вот отношения 1 Код:Laravel 5 Запросы Отношения

/** 
* 
* @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; 
} 

, но мне нужно добавить одно где заявление, в котором я могу выбрать только активные адреса 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'); 
    } 
} 
+0

Возможный дубликат [Laravel 4 - Как использовать, где условия для столбца отношения] (http://stackoverflow.com/questions/18885127/laravel-4-how-to-use-where-conditions-for-relations- столбец) –

+0

какая ошибка вы получаете? –

+0

Я получаю все IP-адреса, я хочу только активные. В таблице базы данных у меня есть статус столбца ['Active', 'Deleted']. –

ответ

0

Попробуйте это, получить только адреса со статусом 'активный':

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

Причина этого не работает:

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

является то, что where мы используем здесь является where класса Collection, который не принимает компаратор в качестве второго параметра, как сделать where из Model с.