没有变形的laravel关系

时间:2016-06-08 17:02:58

标签: laravel laravel-5

我有一个现有的数据库,我需要使用laravel来使用(不修改)项目。

Accounts表,Vendor表和Contacts表。 Contacts可以属于Account / Vendor关系中的belongTohasMany

Contacts表格有Owner列,可以键入AccountsVendor表的主键。

据我所知,"对"在laravel世界中执行此操作的方法是使用变形,您可以在contactable_id表中添加contactable_typeContacts列,然后从那里开始。

但是,由于我无法修改数据库,因此我需要一种使用现有关系的方法。

我可以通过向Contact类添加一个方法来做一些hackish:

public static function account_contacts()
{
    return DB::table('Contacts')
        ->join('Accounts', 'Contacts.Owner', '=', 'Accounts.ID');
}

然而,这将返回一个数组数组而不是Contact个对象。

有没有办法让实际的Contact个对象回来,或者在不使用变形的情况下创建关系?

编辑:抱歉我需要的内容不明确。我只想将所有Account :: Contacts或所有Vendor :: Contacts作为Contacts的数组,以便我可以使用它们来迭代它们{ {1}}模型,而不是数组。

2 个答案:

答案 0 :(得分:1)

要回答您的直接问题(即将普通数组转换为Eloquent模型),您可以这样做:

$ids = DB:table('Contacts')
           ->join('Accounts', 'Contacts.Owner', '=', 'Accounts.ID')
           ->forPage($pageNumber, $totalPerPage)
           ->pluck('id');

return Contact::findMany($ids);

答案 1 :(得分:0)

belongsTohasMany第二个参数都是外键,您可以更改。您还可以向其添加where条件 - 如果有必要,您可以保留where条件,如果没有这样的字段,则可以Contact条件public function contacts() { return $this->hasMany('App\Contact', 'Owner')->where('type', 'accounts'); } 条件1}}只属于一个模型。

如果我正确理解您的问题,您可以为帐户模型设置您的关系示例:

public function contacts()
{
    return $this->hasMany('App\Contact', 'Owner')->where('type', 'vendor');
}

对于供应商型号:

git fetch origin our-team