Laravel 5:"Trying to get property of non-object" 从 2 个链接模型获取数据时
Laravel 5: "Trying to get property of non-object" when getting data from 2 linked models
我正在尝试创建一个简单的 Laravel 5 应用程序用于测试目的,但我仍在努力通过模型关系显示所需的数据。
当我通过 artisan tinker 测试模型关系时,一切正常。
在我的索引视图中,一切都很好......直到我使用第二个链接模型,这给了我主题中的错误。
这是我的表(迁移):
Schema::create('orders', function(Blueprint $table)
{
$table->increments('id');
$table->timestamps();
$table->string('status');
});
Schema::create('products', function(Blueprint $table)
{
$table->increments('id');
$table->integer('order_id')->unsigned();
$table->timestamps();
$table->string('name');
$table->string('sn');
});
Schema::create('services', function(Blueprint $table)
{
$table->increments('id');
$table->integer('order_id')->unsigned();
$table->timestamps();
$table->string('name');
$table->string('type');
});
这是我的 3 个模型:
//文件:App\Order.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Order extends Model {
public function products()
{
return $this->hasMany('App\Product');
}
public function services()
{
return $this->hasMany('App\Service');
}
}
//文件:App\Product.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model {
public function order()
{
return $this->belongsTo('App\Order');
}
}
//文件:App\Service.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Service extends Model {
public function order()
{
return $this->belongsTo('App\Order');
}
}
//我的简单控制器OrdersController.php
public function index()
{
$orders = Order::all();
return view('orders.index', compact('orders'));
}
最后是我的观点“/resources/views/orders/index.blade.php”
<ul>
@foreach( $orders as $order )
<li>
Order# {{ $order->id }} - //this line is OK
{{$order->products->first()->name}} - //this line is OK
{{$order->services->first()->name}} - //as soon as I add this line, I get the error!
</li>
@endforeach
</ul>
=> 我做错了什么吗?是否可以从同一视图中的 2 "external" 个模型中检索数据?
非常感谢您的帮助!
每个订单是否至少分配了一项服务?我的猜测不是,在这种情况下,您应该将其包装在 if 语句中:
@foreach( $dossiers as $dossier )
<li>
Order# {{ $order->id }}
@if($product = $order->products->first())
{{ $product->name }}
@endif
@if($service = $order->services->first())
{{ $service->name }}
@endif
</li>
@endforeach
我正在尝试创建一个简单的 Laravel 5 应用程序用于测试目的,但我仍在努力通过模型关系显示所需的数据。 当我通过 artisan tinker 测试模型关系时,一切正常。 在我的索引视图中,一切都很好......直到我使用第二个链接模型,这给了我主题中的错误。
这是我的表(迁移):
Schema::create('orders', function(Blueprint $table)
{
$table->increments('id');
$table->timestamps();
$table->string('status');
});
Schema::create('products', function(Blueprint $table)
{
$table->increments('id');
$table->integer('order_id')->unsigned();
$table->timestamps();
$table->string('name');
$table->string('sn');
});
Schema::create('services', function(Blueprint $table)
{
$table->increments('id');
$table->integer('order_id')->unsigned();
$table->timestamps();
$table->string('name');
$table->string('type');
});
这是我的 3 个模型:
//文件:App\Order.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Order extends Model {
public function products()
{
return $this->hasMany('App\Product');
}
public function services()
{
return $this->hasMany('App\Service');
}
}
//文件:App\Product.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model {
public function order()
{
return $this->belongsTo('App\Order');
}
}
//文件:App\Service.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Service extends Model {
public function order()
{
return $this->belongsTo('App\Order');
}
}
//我的简单控制器OrdersController.php
public function index()
{
$orders = Order::all();
return view('orders.index', compact('orders'));
}
最后是我的观点“/resources/views/orders/index.blade.php”
<ul>
@foreach( $orders as $order )
<li>
Order# {{ $order->id }} - //this line is OK
{{$order->products->first()->name}} - //this line is OK
{{$order->services->first()->name}} - //as soon as I add this line, I get the error!
</li>
@endforeach
</ul>
=> 我做错了什么吗?是否可以从同一视图中的 2 "external" 个模型中检索数据? 非常感谢您的帮助!
每个订单是否至少分配了一项服务?我的猜测不是,在这种情况下,您应该将其包装在 if 语句中:
@foreach( $dossiers as $dossier )
<li>
Order# {{ $order->id }}
@if($product = $order->products->first())
{{ $product->name }}
@endif
@if($service = $order->services->first())
{{ $service->name }}
@endif
</li>
@endforeach