如何返回一个oneToMany关系


Laravel 5 - How do I return a oneToMany relationship?

我是Laravel的新手,使用Laravel 5我很难从数据库返回数组。

我有几个"行为",每个行为有许多"横幅"。每当我尝试从我的横幅数组($act->banner ->count())中获得输出时,我发现它抛出一个错误,因为它是空的。

代码如下:

routes.php:

Route::model('banners', 'Banner');
Route::model('acts', 'Act');
// Controller routes
Route::resource('acts', 'sf_ActController');
Route::resource('acts.banners', 'sf_BannerController');

Route::bind('banners', function($value, $route) {
    return App'Banner::whereact_id($value)->first();
});
Route::bind('acts', function($value, $route) {
    return App'Act::whereact_id($value)->first();
});

Act.php(模型)

namespace App;
use Illuminate'Database'Eloquent'Model;
class Act extends Model
{
protected $table = 'sf_act';
protected $primaryKey = 'act_id';
public function act() {
      return $this->hasMany('Banner');
    }
}

Banner.php (model)

namespace App;
use Illuminate'Database'Eloquent'Model;
class Banner extends Model
{
  protected $table = 'sf_banner';
  protected $primaryKey = 'banner_id';
  public function banner() {
        return $this->belongsTo('Act' , 'act_id' , 'act_id');
  }
}

sf_ActController.php (controller)

namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Act;
use App'Banner;
use App'Http'Requests;
use App'Http'Controllers'Controller;
use Input;
use Redirect;
class sf_ActController extends Controller
{
  public function show(Act $act)
  {
  //pass object to correct view
  return view('pages.acts.show' , compact('act'))->with('banner', Banner::find($act));
  }

acts/show.blade.php (view)

<!-- /resources/views/acts/show.blade.php -->
@extends('app')
@section('content')
<h2>{{ $act->act_title }}</h2>
  {{ $act->banners->count() }}
此时,我得到以下错误:

fatalerroreexception在a03036ad81fb4e6d90e9fe5e3da62c65行7:在null

上调用成员函数count()

为什么我不获取我的横幅数据!?(标题变量在h2标签输出很好,所以db和一切直到那一点是工作。)谢谢。

您需要在关系中指定到模型的完整"路由",包括名称空间:

public function act() {
  return $this->hasMany('App'Banner');
}

belongsTo:

也是如此
public function banner() {
    return $this->belongsTo('App'Act' , 'act_id' , 'act_id');
}

在hasMany方法中包含外键的名称可能是一个好主意。

public function act() {
  return $this->hasMany('App'Banner', 'act_id');
}

也可能你不需要包含第三个形参。

希望有帮助。也可以和大家分享一个学习Laravel的分步链接:learn Laravel 5.0 => 5.1

您当前的hasMany关系设置如下:

public function act() {
  return $this->hasMany('Banner');
}

然而,在你看来,你叫这个关系:

$act->banners->count()

应该是:

$act->act()->count();