我试图将Eloquent用于关系,而alwys也有同样的结果:
Call to undefined method Illuminate\Database\Query\Builder::xxxx()
其中xxxx可能是"儿子"在我的模型中定义,如果我使用其他代码,则在save()中定义。
首先,我有两个模型(简化):
<?php
use Cartalyst\Sentry\Users\Eloquent\User as SentryUserModel;
class User extends SentryUserModel {
public static $rules = array( 'first_name' => 'required',
'last_name' => 'required',
);
protected $hidden = array('password', 'remember_token');
public function sons()
{
return $this->hasMany('Son');
}
}
和
class Son extends \Eloquent {
protected $guarded =['id'];
public $timestamps = false;
public static $rules = array( 'first_name_son' => 'required',
);
public function user()
{
return $this->belongsTo('User');
}
}
和PhpStrorm告诉我,Eloquent是一个未定义的类。即便如此,我也可以使用一些方法。
我现在的问题。我试着用它来拯救一个儿子&#34; &#34;用户&#34;:
$user = Sentry::getUser();
$data = Input::all();
$rules_son = Son::$rules;
$son = new Son(array(
'first_name_son' => $data['first_name_son'],
));
$user->sons()->save($son);
这里打破了
Call to undefined method Illuminate\Database\Query\Builder::sons()
如果我使用
$user->with('sons')->save($son);
Call to undefined method Illuminate\Database\Query\Builder::save()
这很好用
Son::create(array(
'user_id' => $user->id,
'first_name_son' => $data['first_name_son'],
));
所有这些代码都在我的UsersController
中使用mnethod&#34; sons()&#34;的问题是什么?为什么在这个项目中Eloquent可以&#34;没有定义&#34;? (它的定义因为我可以使用Eloquent ORM进行搜索或保存)
谢谢你们
答案 0 :(得分:1)
当我在等待答案时;),我仍然遇到Eloquent方法的问题。我不能使用$ user-&gt; books() - &gt; get()或 - &gt; attach()与许多用户和书籍的关系,以及User :: with(&#39; books&#39 ;)我有同样的问题
Call to undefined method Illuminate\Database\Query\Builder::xxxx()
我的问题是因为哨兵。我得到了用户:
$user = Sentry::getUser();
并且,我不知道为什么,这个$ user也不是User模型,所以有些方法失败了。
我的解决方案,我不知道它是否是最好的: - 创建静态函数以使用Sentry
调用用户//In User.php model
public static function eloquentUser(){
$sentry_user = Sentry::getUser();
return $user = User::findOrFail($sentry_user->id);
}
然后我称之为:
$user = User::eloquentUser();
使用Sentry Stiil并与Eloquent合作。
答案 1 :(得分:0)
现在我认为你在查询生成器方面有点困惑。您不能使用$ user-&gt; books()因为书籍不是一种方法,而是仅使用书籍时,Eloquent使用魔术方法来获取表示字段或关系的模型属性
使用用户外观时,结果将是用户口才模型并使用此
$users = User::with("books")->get()
它将为每个用户获取所有用户和书籍。您现在可以通过
访问您的图书$mybooks = $user->books
这可能是某个Eloquent Model的ArrayCollection。 请参阅get()方法特定于Query Builder,仅在尝试从Db获取数据时使用。
现在,我没有得到Sentry的部分。
未来这里有一些提示
不要尝试将查询构建器方法用于Eloquent Model。没有理由
$user->with(books) if you already fetched books using. With method does not even exists
User::with(books)->get()
从模型中保存模型,如
$user->books->save()