Laravel 5的关系

时间:2015-06-27 21:06:55

标签: eloquent laravel-5

我正在使用Laravel 5.1。我有一个包含两个表的数据库:

第一,公司表:

|-------|--------------|
|   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)

简单来说,我需要确定关系表中所选公司是否有父项和/或子项以及当前选择的位置(作为子项或父项)。 nullparent_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 个答案:

答案 0 :(得分:0)

Laravel正在尽最大努力维持这种关系,首先你需要拥有2个模型,或者你可以说两个表用于关系,现在你需要指明它们是否具有一对一或一对多的关系或许多人,你可以在模型上简单地指定它。由于您的表不是特定的表,因此您可以看到用户表和问题表关系之间的关系示例这里是一对多。一个用户可以有很多问题而一个问题现在属于用户在我的问题模型中,实现看起来像public function user() { return $this->belongsTo('App\User'); }

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

确保您在迁移时保留了外键:)您可以在此处看到更多http://laravel.com/docs/5.0/eloquent#relationships希望这会有所帮助