【问题标题】:laravel 5.3 : Undefined property: Illuminate\Database\Eloquent\Collection Errorlaravel 5.3:未定义的属性:Illuminate\Database\Eloquent\Collection Error
【发布时间】:2017-03-05 14:55:08
【问题描述】:

我有一张表叫医生(staff_id,specialization),另一张表是员工(staff_id,password,name,email,address,department,sub_department,post),在医生表中,外键 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');   
       }
    }

这是我的“医生模型”

    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 行中的错误异常: 未定义属性:Illuminate\Database\Eloquent\Collection::$staff(查看: C:\wamp\www\se\resources\views\pages\welcome.blade.php)

【问题讨论】:

    标签: php mysql laravel-5 laravel-5.3


    【解决方案1】:

    尝试像这样从控制器传递数据:

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

    【讨论】:

      【解决方案2】:
      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>
      

      【讨论】:

      • 我不想打印人员表我想使用人员模式和医生模式中定义的功能打印人员表+医生表的专业化。所以我可以像所有属性一样为每个员工 ID 打印整个信息
      【解决方案3】:

      谢谢大家的帮助我终于找到了解决这个错误的方法 这里有一些可以帮助你的点 - 1. 在模型中,我们应该告诉模型一个主键,比如我的“STAFF”模型会像 命名空间应用程序;

      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”。

      我们也必须为我们的“医生”模型更改此设置 命名空间应用程序;

      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. 现在我们的控制器应该是这样的

        使用应用\医生;

        使用应用\员工;

        类 PageController 扩展控制器 { 公共函数 getIndex(){ $医生 = 医生::find(id); return view('pages.welcome')->withDoctor($doctor); } }

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

        {{ $医生->员工->姓名 }}

      这是有效的。

      for more information click here

      【讨论】:

        猜你喜欢
        • 2016-07-08
        • 2016-06-02
        • 2014-11-23
        • 1970-01-01
        • 2017-02-12
        • 2018-10-22
        • 1970-01-01
        • 2020-05-04
        • 1970-01-01
        相关资源
        最近更新 更多