为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
Cats萌萌 2023-03-04 18:00:32
我有 Todo 和 Tbl_leads 模型以及相应的表 todos 和 tbl_leads。当我尝试使用潜在客户名称时,它会给我一个错误。#This is Tbl_leads model<?phpnamespace 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');    }}这是待办事项模型<?phpnamespace 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>   @endforelsePlz 谁能告诉我我做错了什么。而且我知道型号名称和主键略有不同未相应地设置为 laravel。我的模型关系是否正确?
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

让我向您澄清几点。首先,您需要return在每个关系中添加一个。例如:


public function lead() {


    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()

{

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

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

}


查看完整回答
反对 回复 2023-03-04
  • 1 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信