【发布时间】:2017-10-21 11:56:19
【问题描述】:
我在一个项目中使用 Laravel 5.4,我无法从相关模型中获取信息以正确显示。该计划适用于一家小型兽医诊所,首先注册宠物主人,然后添加他们的每只宠物(每个主人可以有很多只)。反过来,每只宠物都可以有多次咨询、疫苗接种、文件等。因为每个宠物至少涉及三层,但我认为最好保持 url/路径尽可能简单,而不是宠物的url 为 /owner/1/pet/1,我将其保留为 /pet/1,我相信这就是为什么我尝试过的任何事情似乎都无法正常工作(我见过的所有示例都遵循第一条路径)。
宠物控制器
我可以毫无问题地创建新宠物,它们的所有信息都已保存并可编辑。问题是当我尝试查看它们中的每一个时,有些看起来都与它们各自的所有者信息一样,但其他(最新的)给我一个错误Trying to get property of non-object (View: D:\xampp\htdocs\veterinary\resources\views\pets\show.blade.php)
public function index()
{
$pets = Pet::all();
$owner = Owner::find($pets);
return view('pets.index', compact('owner', 'pets'));
}
public function store(Request $request)
{
$pet= new Pet;
//////////////
$pet->save();
}
public function show(Pet $pet)
{
$owner = Owner::find($pet);
return view('pets.show', compact('owner', 'pet'));
}
所有者控制者
我可以毫无问题地显示主人的信息,但我似乎无法检索到他们名下注册的宠物列表。我尝试了不同的方式并得到了不同的结果(没有错误但没有找到宠物,对象为空,查询无法转换为字符串等)。我用迄今为止我尝试过的注释方式留下了函数。
public function index()
{
$owners = Owner::all();
return view('owners.index', compact('owners'));
}
public function getPets($id)
{
$pets = Pet::owner($id)->get();
return $pets;
}
public function store(Request $request)
{
$owner = new Owner;
//////////////
$owner->save();
}
public function show(Owner $owner)
{
//$pets = Owner::pets();
//$owner = Owner::find($owner->id_owner);
//$pets = $this->getPets($owner->owner_id);
//$pets = Pet::find($owner)->owner()->where('id_owner', '=', $owner->id_owner)->get();
$pets = DB::table('pets')->where('owner_id','=',$owner->id_owner);
$pets = Pet::find($pets)->owners;
return view('owners.show', compact('owner', 'pets'));
}
宠物模型
public function owner()
{
return $this->belongsTo('App\Owner');
}
所有者模型
public function pets()
{
return $this->hasMany('App\Pet');
}
抱歉,这篇文章太长了,我只是很难弄清楚如何正确地实现所有这些。在过去的几天里,我尝试了各种不同的方法,最终得到了部分有效的结果,或者直接把一切都搞砸了。感谢您的帮助!
【问题讨论】:
-
这不是它的工作原理..
-
宠物在保存时应与所有者相关联..
-
或者如果这是多对多关系..然后使用belongsToMany
-
我觉得不是多对多的关系,每个Owner可以有很多宠物(hasMany),但是每个宠物只能有一个主人。在宠物控制器的存储功能中,我之前确实尝试过使用
$owner->pets()->save($pet);,但它没有通过,它只是显示一个错误并且不保存新宠物,这就是我重新使用$pet->save();的原因,但我确实认为这是无法访问最新保存的宠物的部分原因(仅以前的宠物)。我在这里做错了吗? -
$owner = Owner::find(1);然后 ..$pet = new Pet;blahblah ,$pet->owner_id = $owner->id; $pet->save();
标签: php laravel laravel-5.4