簡體   English   中英

Laravel:顯示來自兩個相關模型的信息

[英]Laravel: showing information from two related models

我在項目中使用Laravel 5.4,但無法從相關模型中獲取信息以正確顯示。 該計划適用於小型獸醫診所,在該診所中首先注冊了寵物主人,然后添加了他們的每只寵物(每個主人可以養很多只)。 反過來,每個寵物可以具有多個咨詢,疫苗,文件等。由於每個寵物至少涉及三層,因此最好使URL /路徑盡可能簡單,所以最好不要使用寵物的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'));
}

業主控制器

我可以毫無問題地顯示主人的信息,但似乎無法檢索以它們的名字注冊的寵物的清單。 我嘗試以不同的方式進行操作,並獲得了不同的結果(沒有錯誤,但沒有找到寵物,對象為null,查詢無法轉換為字符串等)。 到目前為止,我對函數進行了評論。

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');
}

很長的帖子很抱歉,我很難弄清楚如何正確實現所有這些。 在過去的幾天中,我嘗試了各種不同的方式,最終得到了部分有效的結果,或者直接弄亂了所有內容。 謝謝你的幫助!

您只需按照以下步驟即可實現。

建立我們的模型關系..

寵物模型

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>

希望這真的有幫助..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM