在Laravel中调用关系时遇到问题

时间:2018-10-21 05:51:21

标签: php laravel eloquent relationship

在laravel中调用关系时遇到问题,我有4个表:用户,票证,商店,状态。并且我在“用户与票证”之间有一个@OneToMany关系(1个用户有许多票证)。其他关系是@OneToOne(一张票具有1个商店和状态)。

现在,我的桌子上有6张票证,有4位用户,我可以将关系打印到前4张票证,但是当我想将票证称为5或6时,该关系消失。 与商店和状态相同,我可以在票证ID不大于表中物品的数量时打印关系。

这些是我的模型: 用户模型:

class User extends Authenticatable
{
    use Notifiable, HasRoles;

    protected $fillable = [
        'id','name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function tickets()
    {
        return $this->hasMany(Ticket::class, 'usuario_id');
    }
}

机票型号:

class Ticket extends Model
{
    protected $fillable = [
        'comentarios', 'falla', 'modelo', 'no_serie', 'monto', 
'usuario_id', 'status_id', 'store_id'
    ];

    public function user()
    {
        return $this->belongsTo(User::class, 'id');
    }
    public function store()
    {
        return $this->hasOne(Store::class, 'id');
    }
    public function status()
    {
        return $this->hasOne(Status::class, 'id');
    }
}

商店型号:

class Store extends Model
{

    protected $table = "stores";
    protected $primaryKey = 'id';
    public $timestamps = false;

    protected $fillable = [
        'sucursal', 'dirección'
    ];

    public function ticket()
    {
        return $this->belongsTo(Ticket::class, 'store_id');
    }
}

状态模型:

    class Status extends Model
{

    public $timestamps = false;
    protected $fillable = [
      'status'
    ];

    public function ticket()
    {
        return $this->belongsTo(Ticket::class, 'status_id');
    }
}

控制器:

$tickets = Ticket::all();



    return view('Admin.index', compact('tickets'));

查看

@foreach($tickets as $ticket)
    <li>{{ $ticket->user }}</li>
@endforeach

结果:

Result of the foreach

在视图中,我将调用所有票证($ tickets),并为每张票证打印关系(用户功能)。但是在结果中,您可以看到仅打印前4个关系(我的用户数),如果我添加1个用户,则会在第5张票证中显示该关系。 其他表(存储和状态)也存在同样的问题。

2 个答案:

答案 0 :(得分:0)

机票模式中的user()关系替换为:

public function user()
{
    return $this->belongsTo(User::class, 'usuario_id', 'id');
}

答案 1 :(得分:0)

Ticket model中,您必须将功能更改为
public function user() { return $this->belongsTo(User::class, 'usuario_id', 'id'); }

或仅public function user() { return $this->belongsTo(User::class); }