laravel 4 pivot table保存不工作

时间:2014-01-06 23:12:58

标签: php laravel many-to-many

我无法将额外数据保存(创建新行)到数据透视表。

我不得不使用旧版数据库架构(仍在现场工作)。我目前正在Laravel重做这个网站。

<?php namespace Carepilot\Repositories\Organizations;

use Carepilot\Repositories\EloquentRepositoryAbstract;

/*
 * This class is the Eloquent Implementation of the Organization Repository
 */

class OrganizationRepositoryEloquent extends EloquentRepositoryAbstract implements OrganizationRepositoryInterface {


  /*
  * Define Eloquent Organization Type Relation.
  *
  */
    public function orgtypes()
    {
        return $this->belongsToMany('Carepilot\Repositories\OrganizationTypes\OrganizationTypesRepositoryEloquent', 'organizations_orgtypes', 'organization_id', 'orgtype_id')
            ->withPivot('objectstate_id');
    }

}


<?php namespace Carepilot\Repositories\OrganizationTypes;

use Carepilot\Repositories\EloquentRepositoryAbstract;

/*
 * This class is the Eloquent Implementation of the Organization Repository
 */

class OrganizationTypesRepositoryEloquent extends EloquentRepositoryAbstract implements OrganizationTypesRepositoryInterface {

    protected $table = 'orgtypes';

  /*
  * Define Eloquent Organization Type Relation.
  *
  */
    public function organizations()
    {
        return $this->belongsToMany('Carepilot\Repositories\Organizations\OrganizationRepositoryEloquent', 'organizations_orgtypes', 'organization_id', 'orgtype_id')
            ->withPivot('objectstate_id');
    }

}

在Orgaizations控制器中,我尝试保存新组织但在数据透视表中出错。

<?php

use \Carepilot\Repositories\Organizations\OrganizationRepositoryInterface;
use \Carepilot\Repositories\Procedures\ProcedureRepositoryInterface;
use \Carepilot\Helpers\StatesHelper;

class OrganizationsController extends BaseController {

    /**
     * Organization Repository
     *
     * @var organization_repo
     */
    protected $organization_repo;
    protected $procedures;
    protected $states;

    public function __construct(OrganizationRepositoryInterface $organization_repo, 
                                ProcedureRepositoryInterface $procedures, 
                                StatesHelper $states)
    {
        $this->organization_repo = $organization_repo;
        $this->procedures = $procedures;
        $this->states = $states;
    }

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        return View::make('organizations.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
        $supportedStates = ['' => 'Choose'] + $this->states->supportedStates();
        $procedures = $this->procedures->getDropDown();
        return View::make('organizations.create', compact('supportedStates', 'procedures'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */

    public function store()
    {
        $input = Input::all();
        // validation here

        $new_organization = $this->organization_repo->create(array_only($input, ['organization_name']));
        $input['objectstate_id'] = 27;
        $input['orgtype_id'] = 1;
        $new_organization->orgtypes->pivot->create(array_only($input, ['objectstate_id', 'orgtype_id']));
        $new_organization->addresses()->create(array_only($input, ['street1', 'zip', 'city', 'state_code']));
        $input['objectstate_id'] = 4;
        $new_organization->users()->create(array_only($input, ['first_name', 'last_name', 'email', 'password', 'objectstate_id']));

        return "completed";

    }

这将返回“Undefined property:Illuminate \ Database \ Eloquent \ Collection :: $ pivot”,因为尚未创建数据透视。我缺少什么?

1 个答案:

答案 0 :(得分:0)

我发现'attach'方法可以用

之类的东西做我想要的
$new_organization->orgtypes()->attach(1, ['objectstate_id' => '27']);