繁体   English   中英

如何在Laravel 5.4中从多个表中检索数据

[英]How to retrieve data from multiple tables in Laravel 5.4

我有两个表,我想从它们中检索数据并将其传递给我的表。

为此,我创建了两个具有一对一关系的模型:

[地址]

class Adress extends Model
{    
     public function KontoKorrent()
     {
         return $this->hasOne(KontoKorrent::class, 'Adresse');
     }
}

[KontoKorrent]

class KontoKorrent extends Model
{
     public function Adresse()
     {
        return $this->belongsTo(Adress::class,'Adresse');
     }
}

我的控制器如下所示:

class AdressesController extends Controller
{
   public function index()
   {
    $adresses = Adress::with('KontoKorrent')->paginate(2);
      return view('welcome', compact('adresses'));

   }
}

当我使用tinker程序App \\ Adress ::每个adress都与kontokorrent 可以了

  App\Adress {#698
         Adresse: "3030",
         Anrede: "Company",
         Name1: "A Company Name",
         LieferStrasse: "Dummystreet",
         KontoKorrent: App\KontoKorrent {#704
           Location: "1",
           Adresse: "3030",
           Kto: "S0043722",

在我看来:

<ul>
  @foreach($adresses as $adress)
    <li>{{ $adress->Name1 }}</li>    //this is working
    <li>{{ $adress->KontoKorrent->Kto }}</li>  //this is NOT working
  @endforeach
</ul>

{{ $adresses->links() }}

该关系向我显示了一个错误:

试图获取非对象的属性

我做错了什么?

您得到的错误:

试图获取非对象的属性

与某些没有KontoKorrent Adress模型有关,则您的$adress->KontoKorrent返回null ,并且null不是对象,这就是消息的原因。

要解决此问题,您应该执行if检查adress是否存在关系:

<ul>
  @foreach($adresses as $adress)
    <li>{{ $adress->Name1 }}</li>    //this is working
    <li>
        @if($adress->KontoKorrent)
            {{ $adress->KontoKorrent->Kto }}
        @else
            <!-- Put something here if you want, otherwise remove the @else -->
        @endif
    </li>  //this is NOT working
  @endforeach
</ul>

可以简化为:

{{ $adress->KontoKorrent ? $adress->KontoKorrent : 'the else content' }}

或在PHP> = 7.0中,可以使用null合并运算符:

{{ $adress->KontoKorrent ?? 'the else content' }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM