laravel 5.3:未定义的属性:Illuminate \ Database \ Eloquent \ Collection Error

时间:2016-10-23 21:43:42

标签: php mysql laravel-5 laravel-5.3

我有一个名为doctor(staff_id,specialization)的表,另一个表是staff(staff_id,密码,姓名,电子邮件,地址,部门,子部门,帖子),在医生表中,外键staff_id是对员工表的staff_id属性。我不知道为什么我得到这个错误我使用Laravel 5.3请帮助我。

这是我的"员工模型"

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Staff extends Model
    {
       protected $table = 'Staff';

       public function doctor(){
          return $this->hasOne('App\Doctor');   
       }
    }

这是我的" Doctor Model"

    namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Doctor extends Model
    {
       protected $table = 'Doctor';
       public function staff(){
           return $this->belongsTo('App\Staff');
       }
    }

这是控制器

    use App\Doctor;

    use App\Staff;

    class PageController extends Controller
    {
        public function getIndex(){
           $doctor = Doctor::all();
           return view('pages.welcome')->withDoctor($doctor);
        }
   }

这是我使用它的welcome.blade.php

 <pre>
   <tr>
    <td>{{ $doctor->staff->name }}</td>
   </tr>
 </pre>

当我运行它时出现了这个错误:

  

150a6b9d586ccbe6225ed748a7eb8dfc842ce323.php第26行中的ErrorException:   未定义属性:Illuminate \ Database \ Eloquent \ Collection :: $ staff(查看:   C:\瓦帕\ WWW \本身\资源\视图\页面\ welcome.blade.php)

3 个答案:

答案 0 :(得分:0)

尝试从控制器传递数据,如下所示:

public function getIndex(){
    $doctor = Doctor::all();
    return view('pages.welcome')->with('doctor', $doctor);
}

答案 1 :(得分:0)

Your controller should be.
    use App\Doctor;

    use App\Staff;

    class PageController extends Controller
    {
        public function getIndex(){
           $doctor = Doctor::all();
           return view('pages.welcome',compact('doctor'));
   }
}

Your views should be-

 <pre>
@foreach($doctor as $doctors)
   <tr>
    <td>{{ $doctors->name }}</td>
   </tr>
@endforeach
 </pre>

答案 2 :(得分:0)

谢谢你们的帮助我终于找到了解决这个错误的方法 这里有一些可以帮到你的要点 - 1.在模型中,我们应该告诉模型一个主键,如我的&#34; STAFF&#34;模特会是这样的     命名空间App;

use Illuminate\Database\Eloquent\Model;

class Staff extends Model
{
   protected $primarykey = 'staff_id';
   protected $table = 'Staff';

   public function doctor(){
      return $this->hasOne('App\Doctor');   
   }
}

现在我们可以默认将主键调用为&#34; id&#34;。

我们必须为我们的&#34; DOCTOR&#34;模特也是     命名空间App;

use Illuminate\Database\Eloquent\Model;

class Doctor extends Model
{
   protected $primarykey = 'staff_id';
   protected $table = 'Doctor';
   public function staff(){
       return $this->belongsTo('App\Staff');
   }
}
  1. 现在我们的控制器应该像

    使用App \ Doctor;

    使用App \ Staff;

    类PageController扩展了Controller {    public function getIndex(){    $ doctor = Doctor :: find(id);    返回视图(&#39; pages.welcome&#39;) - &gt; withDoctor($ doctor);     }  }

  2. 现在我的welcome.blade.php应该像 -

      
       {{ $doctor->staff->name }}
      
     

  3. 这是有效的。

    for more information click here