我学习 Laravel 4.2 并尝试使用连接表和分页。 使用分页时我的代码工作。但是,当我与联接表结合使用时,它不起作用。
这是我的控制器: 的 BookController.php
public function index()
{
// Get All Books
//$booksList = Book::all();
$booksList = Book::with('category')->paginate(2);
return View::make('books.index', compact('booksList'));
}
我得到这样的错误:
Call to undefined method Illuminate\Database\Query\Builder::category()
我的类别模型就像这样:
<?php
class Category extends Eloquent
{
}
我的图书模型是这样的:
<?php
class Book extends Eloquent
{
protected $fillable = array('isbn', 'title', 'author', 'publisher', 'language');
}
在 index.blade.php :
<tr>
<td>{{ $book->id }}</td>
<td>{{ $book->isbn }}</td>
<td>{{ $book->category_id }}</td>
<td>{{ $book->title }}</td>
<td>{{ $book->author }}</td>
<td>{{ $book->publisher }}</td>
<td>@if ($book->language == 1) {{ 'English' }} @else {{ 'Indonesian' }} @endif</td>
<td>
{{ link_to_route('books.show', 'Read', array($book->id), array('class' => 'btn btn-primary btn-xs')) }}
</td>
<td>
{{ link_to_route('books.edit', 'Edit', array($book->id), array('class'=>'btn btn-warning btn-xs')) }}
</td>
<td>
{{ Form::open(array('method'=>'DELETE', 'route'=>array('books.destroy', $book->id))) }}
{{ Form::submit('Delete', array('class'=>'btn btn-danger btn-xs', 'onclick' => 'return confirm("Are you sure?")')) }}
{{ Form::close() }}
</td>
</tr>
我的表结构如下:
请帮助谢谢。
答案 0 :(得分:2)
当你在雄辩中使用join时,你必须实现与这样的模型的关系:
<?php
class Book extends Eloquent
{
protected $fillable = array('isbn', 'title', 'author', 'publisher', 'language');
public function category(){
return $this->belongsTo('Category');
}
}
和
<?php
class Category extends Eloquent
{
public function book(){
return $this->hasMany('Category');
}
}
答案 1 :(得分:1)
with('category')
并不代表加入,但急切加载
它实际上会执行加入以急切加载您的数据但您必须为模型定义关系,以便laravel了解要做什么。
简而言之,您只能在现有模型关系上使用with()
。在您的情况下,您应该按如下方式更改模型:
<强> 分类 强>
class Category extends Eloquent
{
public function books(){
return $this->hasMany('Book');
}
}
<强> 书 强>
class Book extends Eloquent
{
protected $fillable = array('isbn', 'title', 'author', 'publisher', 'language');
public function category(){
return $this->belongsTo('Category');
}
}
有关Laravel的更多信息Relationships