Php 如果belongTo关系返回null,则返回默认值

Php 如果belongTo关系返回null,则返回默认值,php,laravel-5,Php,Laravel 5,我有一个belongTo关系,若连接条件匹配,那个么ok,但当并没有数据时,它返回null。在这种情况下,我希望它像我预期的那样返回默认值。这是我所尝试的,但不是成功。请帮帮我 class Task extends Model { use SoftDeletes; protected $table = 'tasks'; protected $fillable = [ 'name', 'description', 'proj

我有一个belongTo关系,若连接条件匹配,那个么ok,但当并没有数据时,它返回null。在这种情况下,我希望它像我预期的那样返回默认值。这是我所尝试的,但不是成功。请帮帮我

class Task extends Model
{
    use SoftDeletes;

    protected $table = 'tasks';
    protected $fillable = [
        'name',
        'description',
        'project_id',
    ];
    protected $with = ['project', 'status'];

    // this is expected
    public function getProjectAttribute($value)
    {
        return $value ?? ['id' => '', 'name' => ''];
    }

    /**
     * @return App\Modules\Com\Models\Project
     */
    public function project()
    {
        return $this->belongsTo(Project::class, 'project_id', 'id')->select(['id', 'name']);
    }
}
使用description属性,我可以覆盖它,但是为什么我不使用project属性呢?如何设置项目关系的位置

类似于此任务::选择(*)->project()->where('project.name','ABC')

我从来没有用过拉威尔——但是。。。文档显示,在使用belongsTo进行更新时,可以将其设置为默认值,以避免条件检查。也许它对选择也有帮助

您可以尝试在通话结束时添加默认值

        return $this->belongsTo(Project::class, 'project_id', 'id')
               ->select(['id', 'name'])
               ->withDefault([
                     'project_id' => 'project.name',
                      'id' => 'ABC',
               ]);
资料来源:

或 您可以执行条件检查:

public function project()
{
    $return $this->belongsTo(Project::class, 'project_id', 'id')->select(['id', 'name']);
    
    if( $return === null )
      // return your default values
    else
      return $return;
}