首页 文章

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

提问于
浏览
0

我有一个名为doctor(staff_id,specialization)的表,另一个表是staff(staff_id,密码,姓名,电子邮件,地址,部门,sub_department,post)和在doctor table中的外键 staff_id 是对staff表的 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');   
       }
    }

这是我的“医生模特”

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:\ wamp \ www \ se \ resources \ views \ pages \ welcome.blade.php)

3 回答

  • 0

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

    public function getIndex(){
        $doctor = Doctor::all();
        return view('pages.welcome')->with('doctor', $doctor);
    }
    
  • 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>
    
  • 0

    谢谢你们的帮助我终于找到了解决这个错误的方法,这里有一些可以帮助你的方法 - 1.在模型中我们应该告诉模型一个主键,就像我的“STAFF”模型将像命名空间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');   
       }
    }
    

    现在我们可以默认将主键称为“id” .

    我们必须为我们的“DOCTOR”模型更改这个命名空间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');
       }
    }
    
    • 现在我们的控制器应该是这样的

    使用App \ Doctor;

    使用App \ Staff;

    class PageController extends Controller {public function getIndex(){$ doctor = Doctor :: find(id);返回视图('pages.welcome') - > withDoctor($ doctor); }}

    • 现在在我的welcome.blade.php应该像 -
    {{ $doctor->staff->name }}
    

    这是有效的 .

    for more information click here

相关问题