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