Laravel 5 Eloquent关系获取数据

时间:2015-12-02 19:03:50

标签: laravel-5

我有两张桌子。

(人)

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

(电动机)

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

在“motors.name”中,我有人的ids。

我有两个模特。

(电动机)

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,而不是ids。怎么解决?

这段代码不好:

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

让我试着回答这个问题。您应该尝试遵循约定,以便更轻松地使用Laravel。 您的motors.name列应该称为person_id。您的电机表型号应称为Motor.php(电机的单数)。对于人员表,Person.php也是如此。

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

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

如果您遵循惯例,则不需要将第二个参数添加到关系名称中。请注意,如果您决定维护您正在使用的文件命名,我应该安装App \ Person,您应该有App \ Persons。 在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-&gt; person为null,当你执行$ row-&gt; person-&gt; name

时会抛出错误