【问题标题】:Laravel 4 - Call to a member function actividads() on a non-object (pivote table)Laravel 4 - 在非对象(数据透视表)上调用成员函数 actividades()
【发布时间】:2014-09-15 05:53:47
【问题描述】:

我正在尝试在我的数据库中保存两个表 actividadsfichas 之间的关系(通过数据透视表:actividad-ficha。我收到以下消息:

Symfony\Component\Debug\Exception\FatalErrorException (E_ERROR)

在非对象上调用成员函数 actividads()

我通过我的 Route 两个变量(ids):

Route::get('ficha/{id_ficha}/{id_actividad}', array('uses' => 'FichaController@enFicha'));

然后,在我的“FichaController”中:

public function enFicha($id_ficha, $id_actividad)
{
        $ficha = Ficha::find($id_ficha);
       // $actividad_id = Actividad::find($id_actividad); (doesnt work)
        $actividad_id = $id_actividad; 
        $ficha->actividads()->sync($actividad_id, false);

        return Redirect::route('actividads.index'); 
}

这是我的模型:

class Actividad extends Eloquent {
protected $guarded = array();
public function fichas()
{       
    return $this->belongsToMany('Ficha', 'actividad_ficha')->withTimestamps(); //
}

class Ficha extends Eloquent {
protected $guarded = array();
public function actividads()
{
    return $this->belongsToMany('Actividad', 'actividad_ficha')->withTimestamps();
}

更改@decco 和@Ben 的建议后,我收到下一条错误消息:

Argument 1 passed to Illuminate\Database\Eloquent\Relations\BelongsToMany::formatSyncList() must be of the type array, string given, called in /Applications/XAMPP/xamppfiles/htdocs/webs/lara4/edu1/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Relations/BelongsToMany.php on line 578 and defined 

我不知道这有什么问题...有什么想法吗??

非常感谢!!

【问题讨论】:

  • 这是不言自明的。将第一行更改为:$ficha = Ficha::find($id_ficha)。顺便说一句,你想分离所有其他关系,只留下这一个吗?可能不会,所以使用sync($actividad_id, false)
  • 现在,我有下一个错误:传递给 Illuminate\Database\Grammar::columnize() 的参数 1 必须是数组类型,给定字符串,在 /Applications/XAMPP/xamppfiles/htdocs 中调用/webs/lara4/edu1/vendor/laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php 在第 105 行并定义
  • 我试过了: $actividad_id = array( 'id' => $id_actividad );但它不起作用!

标签: sql laravel-4 eloquent pivot-table relationships


【解决方案1】:
$ficha = $id_ficha;
$ficha->actividads()->sync($actividad_id);

你的问题。 $fichaString,而不是对象。

$ficha = Ficha::find($id_ficha) 更改第一行,这应该返回ID 为$ficha_idnullFicha 对象。

您还需要将第二行更改为$ficha->actividads()->attach($actividad_id)

【讨论】:

  • 现在,我有下一个错误:传递给 Illuminate\Database\Grammar::columnize() 的参数 1 必须是数组类型,给定字符串,在 /Applications/XAMPP/xamppfiles/htdocs 中调用/webs/lara4/edu1/vendor/laravel/framework/s‌​rc/Illuminate/Database/Query/Grammars/Grammar.php 在第 105 行并已定义 –
  • 我试过了: $actividad_id = array( 'id' => $id_actividad );但它不起作用!
  • 这是因为 sync 方法接受 array 的 ID 作为参数,而不是字符串和布尔值。您可以使用attach 而不是sync,后者接受单个ID 作为参数。如何正确使用eloquent的方法请参考laravel documentation
  • @Ben sync 接受布尔值作为第二个参数,它指的是detaching。第一个确实必须是一个数组。
  • 谢谢你们!!我通过以下方式解决了它:$actividad = Actividad::find($id_actividad); $actividad_id = array($actividad->id);
猜你喜欢
  • 2016-11-20
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多