2014-04-16 46 views
2

我是新來的Laravel,感謝您的幫助laravel 4跨2口才與範圍

我有兩個口才模型,招聘和用戶

的工作模式如下:

<?php 
class Job extends Eloquent { 

    protected $table = 'tbl_jobs'; 

    public function User() { 
    return $this->belongsTo('User','uid'); 
    } 

    public function scopeWork($query) { 
    return $query->where('worktime', '=', 0); 
    } 
} 

和用戶模型是:

<?php 

use Illuminate\Auth\UserInterface; 

class User extends Eloquent implements UserInterface { 
    protected $table = 'tbl_users'; 

    public function scopeActive($query) { 
    return $query->where('status', '=', 'Active'); 
    } 
} 

問題是我如何在範圍(活動和工作)中調用兩個模型一個聲明? 或類似

Job::Work()->with('user')->get(); 

一些事情是屬於關聯不等於內加入?

+0

沒有,有()沒有加入任何東西。所以問題是:你想獲得模型交集(作業範圍和用戶作用域)還是獲取作用域,然後添加與作用域匹配的相關用戶(如果不相同則不添加) - 後者可能導致作業沒有用戶的時候,首先不能用 –

+0

謝謝,deczo,我想要得到模型的交集既有工作範圍又有活動範圍,那就是說我想得到tbl_jobs.worktime = 0和tbl_users.status ='active',怎麼可以我做? – Geeks

回答

6

對於路口,你需要這樣的:

Job::work()  // apply scope on jobs 
    ->whereHas('user', function ($q) { 
    // apply users scope to get only jobs with active users 
    $q->active(); 

})->with(['users' => function ($q) { 
    // apply scope on users' eager loading to load only active 
    $q->active(); 

})->get(); 
+0

非常感謝,它的作品! – Geeks

+0

WhereHas - 不使用索引,我們可以使用Join嗎? –

+0

如果您看到需要性能問題的b/c,則使用'join'。雄辯的「whereHas」和其他一些糖果只是爲了讓你的生活更輕鬆,代碼更加便攜,但有時你可以注意到缺點,那就是性能更差。 –