我正在使用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条件语句以获取该位置。
但我认为有一个更好的解决方案比选择父母,然后在不同的查询中的孩子,我相信一个单一的查询可以做到这一点,但我不知道如何做到这一点。
任何帮助将不胜感激。
您应该定义公司和另一家公司之间的一对多关系,请参阅:http://laravel.com/docs/5.1/eloquent-relationships #一对多 –
https:// github。com/etrepat/baum可以帮助你解决这个问题 –