如何在雄辩中与工会建立关系?

时间:2015-03-24 15:15:42

标签: laravel laravel-4 eloquent

如何在laravel雄辩中与union建立关系?我已经尝试了两种不同的方法。

 User::with(['url' => function($query) use(&$some_property) {
    $favouriteUrls = \DB::table('urls')
        ->select('urls.*')
        ->join('favourite_urls', function($join) {
            $join->on('favourite_urls.url_id', '=', 'urls.id');
        })
        ->where('some_condition', '=', $some_property);

    $query = $query->union($favouriteUrls);
}]);

在第一次尝试中,查询中没有任何联合。然后我尝试将逻辑移到模型中。

class User extends \Eloquent {
    public function urls() {
        $favouriteUrls = \DB::table('urls')
            ->select('urls.*')
            ->join('favourite_urls', function($join) {
                $join->on('favourite_urls.url_id', '=', 'urls.id');
            })
            ->where('some_condition', '=', $this->some_property);

        return $this->belongsTo('Url')->union($favouriteUrls);
    }
}

已成功执行,但$this->some_property已在查询中设置为null值。

在这种情况下,我无法创建两个单独的关系。它必须是一个与工会。我该如何解决?

1 个答案:

答案 0 :(得分:1)

如果您将该关系称为User::with('urls'),您将得到$this->some_property不存在,因为该对象本身不存在。但是如果你在一个对象上调用urls()方法,它应该可行。像这样:

$user = User::find(1);
$user->urls; // here $this->some_property should have a value

假设您从urls()对象调用User方法,$this->some_property应该为您提供值。如果由于某种原因您无法直接在Eloquent模型上访问属性,则可以始终引用模型内部的attributes[]数组。例如

// calling
$this->some_property

// should be the same as
$this->attributes['some_property']

获取所有使用条件

加入的用户

假设users是所有用户的表,在您的查询中,您可以使用$this->some_property更改'users.some_property',并且所有内容都应按预期工作,对于每个用户,它将根据该查询进行查询属性。这是代码:

class User extends \Eloquent {
    public function urls() {
        $favouriteUrls = \DB::table('urls')
            ->select('urls.*')
            ->join('favourite_urls', function($join) {
                $join->on('favourite_urls.url_id', '=', 'urls.id');
            })
        ->where('some_condition', '=', 'users.some_property');

        return $this->belongsTo('Url')->union($favouriteUrls);
    }
}

然后只需调用这样的方法:

User::with('urls')->get();