Laravel试图获得非对象一对一关系的属性

时间:2014-02-23 17:28:05

标签: php orm laravel eloquent

用户架构

public function up()
{
    Schema::table('users', function($table) 
    {
        $table->create();

        $table->increments('id');
        $table->string('email');
        $table->string('real_name');
        $table->string('password');

        $table->timestamps();

    });
}

Dni Schema

public function up()
    {
        Schema::table('dnis', function($table){
            $table->create();

            $table->increments('id');
            $table->integer('user_id');
            $table->string('numero',15);

            $table->timestamps();
        });
    }

我有这些模特

User:

    <?php
    class User extends Eloquent
    {
      public function setPassword($string) 
      {
        $this->setAttribute('password', Hash::make($string));
      }
      public function dni()
      {
        return $this->hasOne('Dni', 'user_id');
      }
    }

DNI

<?php
class Dni extends Eloquent
{
    public function user()
    {
        return $this->belongsTo('User');
    }
}

当我尝试

public function getIndex()
    {
        $users = User::all();
        return View::make('users.index') -> with('users', $users);
    }

我在视图中使用foreach并且无法使{{ $user->dni->numero }}工作 我想我在getIndex()中遗漏了一些东西,但无法弄清楚是什么。

我在foreach中使用了var_dump($users)var_dump($user),我似乎没有在$ users上发送dni日期

2 个答案:

答案 0 :(得分:2)

首先,你并不急于加载它。每次迭代$ users时,您都要进行数据库查询以获取每个用户的Dni模型。将变量传递给您的视图:

$users = User::with('dni')->get();

您遇到的问题可能是您没有为每个用户提供Dni对象,在这种情况下您可以抓住用户:

$users = User::has('Dni')->with('dni')->get();

<强>解决方案: 看起来Laravel不喜欢User1.php中的重复类名,并且正在调用该用户模型而不是您的替代模型。您可以删除User1.php并运行composer dump-autoload或更改User1.php中类的名称并运行composer dump-autoload

答案 1 :(得分:0)

您可以尝试这样的事情:

 @if($student>subjects)
 {{  $student>subjects->name }}
 @endif