2015-06-27 127 views
0

我正在使用Laravel 5.1。我有两个表的数据库:Laravel 5关系

第一,公司表:

|-------|--------------| 
| id | company_name | 
|-------|--------------| 
| 1 | Company A | 
|-------|--------------| 
| 2 | Company B | 
|-------|--------------| 
| 3 | Company A1 | 
|-------|--------------| 
| 4 | Company B1 | 
|-------|--------------| 
| 5 | Company B2 | 
|-------|--------------| 

第二,关系表:

|--------|----------------------------| 
| id | company_id | parent_id | 
|--------|--------------|-------------| 
| 1 |  1  |  null | 
|--------|--------------|-------------| 
| 2 |  2  |  null | 
|--------|--------------|-------------| 
| 3 |  3  |  1  |  
|--------|--------------|-------------| 
| 4 |  4  |  2  | 
|--------|--------------|-------------| 
| 5 |  5  |  2  | 
|--------|--------------|-------------| 

现在的用户选择从关系表company_id ,我们假设4(B1公司)我想显示此结果:

Company B (your selection's main company) 
    Company B1 (your selection) 
    Company B2 (your selection related company) 

或者,如果用户选择1(A公司)这个结果应显示:

Company A (your selection) 
    Company A1 (your selection children company) 

在简单的话,我需要确定所选择的公司中的关系表具有父和/或儿童,其中电流选择的位置(作为孩子或父母)。 有null作为parent_id的公司不能有父母,只有子女。

我迄今为止尝试:

我的关系Model

class CompaniesRelationships extends Model 
{ 
    protected $table = 'companies_relationships'; 
    public function scopeGetParent($query, $companyID) 
    { 
     return $query->whereCompany_id($companyID)->select('parent_id'); 
    } 
} 

我的公司Model

class Companies extends Model 
{ 
    protected $table = 'companies'; 
} 

而且在我的控制器

class CompaniesController extends Controller 
{ 
    public function getCompaniesDetails() 
    { 
     $companyID = Input::get('companyID'); 
     $Company = \App\Models\CompaniesRelationships::getparent($companyID) 
       ->leftJoin('companies', 'companies.id', '=', 'companies_relationships.company_id') 
       ->get(); 
    } 
} 

我会在关系Model中添加另一个范围以获取子项,然后创建一些PHP条件语句以获取该位置。

但我认为有一个更好的解决方案比选择父母,然后在不同的查询中的孩子,我相信一个单一的查询可以做到这一点,但我不知道如何做到这一点。

任何帮助将不胜感激。

+1

您应该定义公司和另一家公司之间的一对多关系,请参阅:http://laravel.com/docs/5.1/eloquent-relationships #一对多 –

+1

https:// github。com/etrepat/baum可以帮助你解决这个问题 –

回答

0

Laravel竭尽全力保持关系首先你需要有2个模型,或者你可以说两个关系表的关系,现在你需要指定resurestive列来指定它是否具有一对一或一对一的关系许多或许多很多,那么你可以简单地指定它在模型上。由于您的表格不是特定的表格,所以您可以看到像用户表格和问题表格关系之间的关系这样的例子,它是一对多的关系。一个用户可以有很多的问题,而一个问题是属于用户现在在我的问题模型维吾尔貌似public function user() { return $this->belongsTo('App\User'); }

现在

用户模型中我的代码看起来像 return $this->hasMany('App\Questions'); }

要确保你一直保持外键,而迁移:)更多,你可以在这里看到http://laravel.com/docs/5.0/eloquent#relationships希望这会有所帮助

+0

这是我用过的,但它只是问题的一部分,我需要知道选定ID在树中的位置。 https://github.com/etrepat/baum非常棒,为我提供了很多帮助。 – roastedtoast