我在项目中使用Laravel 5.4,我无法从相关模型中获取信息以便正确显示。该计划适用于宠物主人首次注册的小型兽医诊所,然后添加每只宠物(每个主人可以有许多)。反过来,每个宠物可以有多个咨询,疫苗接种,文件等。因为每个至少涉及三层,我尽管最好保持网址/路径尽可能简单,所以而不是宠物的url是/ owner / 1 / pet / 1,我把它保存为/ pet / 1,我相信这就是为什么我尝试的东西似乎都没有用(我见过的所有例子都遵循第一条路径)。< / p>
宠物控制器
我可以创建没有问题的新宠物,所有信息都会保存并可以编辑。问题是当我尝试查看它们时,有些看起来应该与各自的所有者信息相符,但其他人(最新的)给我一个错误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');
}
对于极长的帖子道歉,我只是很难弄清楚如何正确实现所有这些。在过去的几天里,我尝试了各种不同的方式,结果是部分工作结果或直接弄乱一切。谢谢你的帮助!
答案 0 :(得分:0)
你可以按照这个步骤实现这一目标。
建立我们的模范关系..
宠物模型
public function owner()
{
return $this->belongsTo('App\Owner');
}
所有者模型
public function pets()
{
return $this->hasMany('App\Pet');
}
现在..我们的所有者控制器
public function index()
{
$owners = Owner::with('pets')->get();
return view('owners.index', compact('owners'));
}
public function store(Request $request)
{
$owner = new Owner;
// $owner->blahblah = $request->blahblah;
$owner->save();
}
public function show(Owner $owner)
{
$owner->pets;
return view('owners.show', compact('owner'));
}
在 owner.index 中,您可以看到所有所有者使用
<ul>
@foreach($owners as $owner)
<li>{{ $owner->somefield }}
<ul>
@foreach($owner->pets as $pet)
<li>{{ $pet->somefield }}</li>
@endforeach
</ul>
</li>
@endforeach
</ul>
owner.show 中的
<ul>
<li>{{ $owner->somefield }}
<ul>
@foreach($owner->pets as $pet)
<li>{{ $pet->somefield }}</li>
@endforeach
</ul>
</li>
</ul>
这就是你使用所有者访问宠物的方式..
现在我们的宠物控制器
public function index()
{
$pets = Pet::with('owner')->get();
return view('pets.index', compact('pets'));
}
public function store(Request $request)
{
// there are several way to save this pet ..
// 1
$pet = new Pet;
$pet->owner_id = $request->owner_id;
// $pet->somefield = $request->somevalue;
$pet->save();
// 2
$owner = Owner::find($request->owner_id);
$owner->pet()->create(['somefield'=>$request->somevalue]);
// 3
$pet = new Pet;
$pet->somefield = $request->somevalue;
$owner = Owner::find($request->owner_id);
$pet = $owner->pet()->save($pet);
}
public function show(Pet $pet)
{
$pet->owner;
return view('pets.show', compact('pet'));
}
对于pet views
,它们具有与owner views
..
<强> pets.index 强>
<ul>
@foreach($pets as $pet)
<li>{{ $pet->somefield }}
<ul>
<li>{{ $pet->owner->somefield }}</li>
</ul>
</li>
@endforeach
</ul>
<强> pets.show 强>
<ul>
<li>{{ $pet->somefield }}
<ul>
<li>{{ $pet->owner->somefield }}</li>
<li>My Owner's other pets
<ul>
@foreach($pet->owner->pets()->where('id','!=',$pet->id)->get as $otherpet)
<li>{{ $otherpet->somefieldlikepetname }}</li>
@endforeach
</ul>
</li>
</ul>
</li>
</ul>
希望这真的有帮助..