Laravel 5.2创建多对多关系时出错

时间:2016-06-15 10:56:48

标签: php arrays laravel laravel-5.2

我正在使用laravel 5.2并且在尝试在国家/地区和货币之间创建多对多关系时出现以下错误:

ErrorException in helpers.php line 748: 

preg_replace(): Parameter mismatch, pattern is a string while replacement is an array

我有以下国家和货币模型定义了多对多的关系:

class Country extends Model
    {
    protected $table = 'country';

    protected $guarded = ['id'];

    public function region()
    {
        return $this->belongsTo('App\Region');
    }

    public function destinations()
    {
        return $this->hasMany('App\Destination');
    }

    public function currencies()
    {
        return $this->belongsToMany('App\Currency', 'country_currency')->withTimestamps();
    }
}


class Currency extends Model
{
    protected $table = 'currency';

    protected $fillable = ['name', 'code', 'sell_rate', 'buy_rate',     'min_denomenation', 'enabled'];

    public function countries()
    {
        return $this->belongsToMany('App\Country', 'country_currency')->withTimestamps();
    }
}

以下是我用于添加国家/地区(到某个地区)的表单的片段,您可以在其中选择多个货币作为数组发布到我的控制器方法:

    <div class="col-xs-12 col-sm-6 col-md-3  form-group">
        <label for="currencies">Currency: </label>
        <select class="form-control" name="currencies[]" id="currencies" multiple>
            @foreach($currencies as $currency)
                <option value="{{$currency->id}}">{{$currency->name}}    </option>
            @endforeach
        </select>
    </div>

我的CountryController如下所示,在发布表单时调用createCountry方法:

class CountryController extends Controller
{

    public function add(Region $region)
    {
        $currencies = Currency::all(['id', 'name']);
        return view('admin.destinationeditor.country.add', compact('region', 'currencies'));
}

    public function createCountry(CountryRequest $request, Region $region)
    {

        $country = $region->countries()->create($request->all());

        $currencyIds = $request->input('currencies');

        $country->currencies()->attach($currencyIds);

        flash()->success('Success!', 'The country page was successfully added to the region');

        return redirect()->back();
    }

}

当我将$currencyIds传递给attach()方法时,似乎出现了这个问题。

如果我不发布任何货币,则创建该国家没有任何问题,但当我尝试过帐货币值时,会出现问题。

有没有人对如何解决这个问题有任何想法?

干杯, 吉姆

2 个答案:

答案 0 :(得分:0)

您可以尝试在货币模型和国家/地区模型中同时创建关系函数吗?我的意思是你已经从国家模型创建了这个功能,但是没有从货币模型中创建任何功能。我不知道兄弟,但你可以检查一下。 :):)

答案 1 :(得分:0)

我设法了解了这个问题的底部。我将$guarded属性更改为$fillable,但在此中输入了错字!