Laravel 5 - 如何返回oneToMany关系?

时间:2015-09-01 15:00:01

标签: php laravel eloquent

我是Laravel的新手,使用Laravel 5我在从数据库返回数组时遇到问题。

我有几个"行为",每个行为都有很多"横幅"。每当我尝试从我的横幅数组中获取输出( $ act-> banners-> 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(模特)

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(控制器)

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() }}

此时我收到以下错误:

  

a03036ad81fb4e6d90e9fe5e3da62c65第7行中的FatalErrorException:   在null

上调用成员函数count()

为什么我没有提取我的横幅数据!? (h2标签中的标题变量输出正常,因此db和所有内容都在运行。)谢谢。

2 个答案:

答案 0 :(得分:2)

您需要指定完整的&#34;路线&#34;关系包括命名空间

中的模型
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

答案 1 :(得分:1)

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

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

}

然而,在您看来,您呼唤这种关系:

$act->banners->count()

不应该是:

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