2015-12-02 30 views
0

我有两个表。Laravel 5雄辩的关系得到的数据

(人)

+------+------+ 
| id | name | 
+------+------+ 
| 1 | John | 
+------+------+ 
| 2 |Albert| 
+------+------+ 

(汽车)

+------+------+------+ 
| id | name | age | 
+------+------+------+ 
| 1 | 1 | 20 | 
+------+------+------+ 
| 2 | 2 | 21 | 
+------+------+------+ 
| 3 | 1 | 20 | 
+------+------+------+ 

在 “motors.name” 我对人的ID。

我有两种模式。

(电动机)

class Motors extends Eloquent 
{ 
    public function person(){ 
     return $this->hasMany('App\Persons', 'id'); 
    }  
} 

(人)

class Persons extends Eloquent 
{ 
    protected $table = 'persons'; 
    public function motors(){ 
     return $this->belongsTo('App\Motors', 'name', 'id'); 
    }  
} 

1控制器

class PrototypeController extends Controller 
{ 
    public function names(Request $request) { 
     $res = Motors::get()->person->name; 
     return view('pages.prototype', compact('res')); 
    } 
} 

1视图

<ul class="list"> 
    @foreach ($res as $row)  
     @if (!empty($row->name)) 
      <li class="list-group-item"> 
       {!! $row->name !!} 
      </li> 
     @endif 
    @endforeach 
</ul> 

我想看看关系中的相关dara,而不是id。它如何解决?

这个代码并不好:在您的帮助

$res = Motors::get()->person->name; 

感谢。

回答

2

让我试着回答这个问题。您应该尝试遵循约定,以便与Laravel合作更轻松。 您的motors.name列应该被称为person_id。你的电机表模型应该被称为Motor.php(单个电机)。 Person表相同,Person.php。

在你Motor.php文件,你的关系将是:

public function person(){ 
    return $this->belongsTo('App\Person'); 
} 

如果按照惯例,你不需要第二个参数添加到关系名。请注意,如果您决定维护您正在使用的文件命名,则应将App \ Person放在App \ Person中。 在你Person.php文件,你的关系将是:

public function motors(){ 
    return $this->hasMany('App\Motor'); 
} 

你的foreach将是:

@foreach ($res as $row)  
    @if (!empty($row->person)) 
     <li class="list-group-item"> 
      {!! $row->person->name !!} 
     </li> 
    @endif 
@endforeach 

注意我如何检查:

@if (!empty($row->person)) 

,而不是:

@if (!empty($row->person->name)) 

它必须不要因为如果$ row-> person为null,当你做$ row-> person-> name时会引发一个错误

+0

它的作品谢谢你。 –