App\Todo::lead 必须返回关系实例,但返回了“null”。是否使用了“return”

我有 Todo 和 Tbl_leads 模型以及相应的表 todos 和 tbl_leads。当我尝试使用潜在客户名称时,它会给我一个错误。


#This is Tbl_leads model

<?php


namespace App;


use Illuminate\Database\Eloquent\Model;


class Tbl_leads extends Model

{


    //Table Name

    protected $table = 'tbl_leads';

    //Primary key

    public $primaryKey = 'ld_id';

    //Timestamps

    public $timestamps = true;


    /**

     * The attributes that are mass assignable.

     *

     * @var array

     */

    protected $fillable = [

        'ld_id', 'first_name', 'last_name', 'email',

    ];


    public function tasks() {

        $this->hasMany('App\Todo', 'lead_id','ld_id');

    }

}

这是待办事项模型


<?php


namespace App;


use Carbon\Carbon;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\SoftDeletes;


class Todo extends Model

{

    use SoftDeletes;


    protected $fillable = [


        'title',

        'description',

        'user_id',

        'outcome_id',

        'lead_id',

        'tasktype_id',

        'due_time',

        'complete_time',

    ];


    protected $casts = [

        'due_time' => 'datetime',

        'complete_time',

    ];


    public function lead() {


        $this->belongsTo('App\Tbl_leads', 'lead_id');

    }

}

这是我的索引方法


 public function index()

    {

        $tasks = Todo::latest()->paginate(5);

        return view('taskmanagement.cruds.index',compact('tasks'));

    }

这是刀片,我想从 Tbl_leads 模型中获取名字


div class="card-body">

  <ul class="todo-list" data-widget="todo-list">

  @forelse($tasks as $task)

   <div class="col-3">

    @if(!empty($task->lead_id))

              <div>

             <small>Related to</small>

</div>

                                        <div class="mt-0">

          <a href="#">

<strong class="mx-4">{{$task->lead->first_name}}</strong>

</a> 

</div>

 @endif

   </div>                                   

      </div>

      </div>

       </li>

   @empty

     <p class="text-center">No Tasks is available</p>

   @endforelse

Plz 谁能告诉我我做错了什么。而且我知道型号名称和主键略有不同未相应地设置为 laravel。我的模型关系是否正确?


Cats萌萌
浏览 112回答 1
1回答

Smart猫小萌

让我向您澄清几点。首先,您需要return在每个关系中添加一个。例如:public function lead() {&nbsp; &nbsp; return $this->belongsTo('App\Tbl_leads', 'lead_id');}接下来您将展示这部分{{$task->lead->first_name}}称为延迟加载的部分。这意味着如果您正在显示的100记录,Todo那么您正在查询数据库101时间。1对于Todo和100次lead->first_name。这不好。所以你可以在你的index方法中做些什么来传递你的关系,with()这样它就会被预加载。意味着它将变成只是一个或两个查询或只是一个连接。所以会很快。你的方法的例子index......public function index(){&nbsp; &nbsp; $tasks = Todo::with('lead')->latest()->paginate(5);&nbsp; &nbsp; return view('taskmanagement.cruds.index',compact('tasks'));}
打开App,查看更多内容
随时随地看视频慕课网APP