Laravel 使用多对多关系加载数据
Laravel data loading using many to many relationhips
尝试在 laravel 中使用多对多关系获取数据。我的文件和代码描述如下。
型号:
Grade.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Grade extends Model{
protected $guarded = [];
public function specifications(){
return $this->belongsToMany(Specification::class)->withTimestamps();
}
public function gnames(){
return $this->belongsToMany(Gname::class)->withTimestamps();
}
public function gsizes(){
return $this->belongsToMany(Gsize::class)->withTimestamps();
}
}
Specification.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Specification extends Model{
protected $guarded = [];
public function grades(){
return $this->belongsToMany(Grade::class)->withTimestamps();
}
public function gnames(){
return $this->belongsToMany(Gname::Class)->withTimestamps();
}
public function gsizes(){
return $this->belongsToMany(Gsize::class)->withTimestamps();
}
}
我在SpecificaitonController中的index方法是这样的,
public function index(Specification $specification){
$specifications = Specification::with('grades:id,grade')->first();
// dd($specifications);
return view('/home.specification.index', compact('specifications'));
}
当我 dd($specificaitons);输出将是,
我的目的是通过“规格 &级”车型。视图如下。
@forelse ($specifications as $specification)
<tbody>
<tr>
<td class="text-left">{{ $specification->id }}</a></td>
<td class="text-left">{{ $specification->specification_no }}</td>
<td class="text-left">{{ $specification->grades->grade }}</td>
<td><a href="/specifications/{{ $specification->id }}/edit">Edit</a></td>
</tr>
</tbody>
@empty
<p><strong>No data to preview</strong></p>
@endforelse
最后我得到了以下错误。
ErrorException Trying to get property 'id' of non-object
我尝试了很多方法来摆脱这种困惑。我想知道我采用的是正确的方法,如果有任何帮助可以识别此错误,我们将不胜感激。
在规范模型中 public 函数 grades(){ return $this->belongsToMany(Grade::class,'grades','id') ->withTimestamps();}
根据你对我评论的回复,问题解决了。在您的控制器中,您正在使用 ->first()
而应该使用 ->get()
来获得 collection 规格,然后 foreach/forelse
collection 在 blade.
public function index(Specification $specification){
$specifications = Specification::with('grades:id,grade')->get();
return view('/home.specification.index', compact('specifications'));
}
尝试在 laravel 中使用多对多关系获取数据。我的文件和代码描述如下。
型号:
Grade.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Grade extends Model{
protected $guarded = [];
public function specifications(){
return $this->belongsToMany(Specification::class)->withTimestamps();
}
public function gnames(){
return $this->belongsToMany(Gname::class)->withTimestamps();
}
public function gsizes(){
return $this->belongsToMany(Gsize::class)->withTimestamps();
}
}
Specification.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Specification extends Model{
protected $guarded = [];
public function grades(){
return $this->belongsToMany(Grade::class)->withTimestamps();
}
public function gnames(){
return $this->belongsToMany(Gname::Class)->withTimestamps();
}
public function gsizes(){
return $this->belongsToMany(Gsize::class)->withTimestamps();
}
}
我在SpecificaitonController中的index方法是这样的,
public function index(Specification $specification){
$specifications = Specification::with('grades:id,grade')->first();
// dd($specifications);
return view('/home.specification.index', compact('specifications'));
}
当我 dd($specificaitons);输出将是,
我的目的是通过“规格 &级”车型。视图如下。
@forelse ($specifications as $specification)
<tbody>
<tr>
<td class="text-left">{{ $specification->id }}</a></td>
<td class="text-left">{{ $specification->specification_no }}</td>
<td class="text-left">{{ $specification->grades->grade }}</td>
<td><a href="/specifications/{{ $specification->id }}/edit">Edit</a></td>
</tr>
</tbody>
@empty
<p><strong>No data to preview</strong></p>
@endforelse
最后我得到了以下错误。
ErrorException Trying to get property 'id' of non-object
我尝试了很多方法来摆脱这种困惑。我想知道我采用的是正确的方法,如果有任何帮助可以识别此错误,我们将不胜感激。
在规范模型中 public 函数 grades(){ return $this->belongsToMany(Grade::class,'grades','id') ->withTimestamps();}
根据你对我评论的回复,问题解决了。在您的控制器中,您正在使用 ->first()
而应该使用 ->get()
来获得 collection 规格,然后 foreach/forelse
collection 在 blade.
public function index(Specification $specification){
$specifications = Specification::with('grades:id,grade')->get();
return view('/home.specification.index', compact('specifications'));
}