我无法使用某些 Eloquent 方法
I can't use some Eloquent methods
我正在尝试将 Eloquent 用于关系并且总是得到相同的结果:
Call to undefined method Illuminate\Database\Query\Builder::xxxx()
其中 xxxx 可以 "sons" 在我的模型中定义,或者如果我使用其他代码则保存 ()。
首先我有这两个模型(简化):
<?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 是未定义的 class。尽管如此,我还是可以使用一些方法。
我现在的问题。我试着用它来保存 "son" of a "user":
$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 "sons()" 有什么问题,为什么在这个项目中 Eloquent 可以是 "not defined"? (它的定义是因为我可以使用 Eloquent ORM 进行搜索或保存)
谢谢大家
当我在等待答案时 ;),我仍然遇到 Eloquent 方法的问题。我不能在多对多用户和书籍的关系中使用 $user->books()->get() 或 ->attach() 之类的东西,还有 User::with('books') 我有同样的问题
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 并使用 Eloquent。
现在我认为您对查询生成器有点困惑。您不能使用 $user->books() 因为 books 它不是一种方法,相反,当仅使用 books 时,Eloquent 使用魔术方法来获取模型属性,这意味着 table 字段或关系
当使用 User facade 时,结果将是一个 User Eloquent 模型并使用这个
$users = User::with("books")->get()
它将获取所有用户和每个用户的书籍。您现在可以通过制作
来访问您的图书
$mybooks = $user->books
这可能又是某个 Eloquent 模型的 ArrayCollection。
请参阅 get() 方法特定于查询生成器,并且仅在尝试从 Db 获取数据时使用。
现在,我没有得到哨兵的部分。
这里有一些关于未来的提示
- User Facade 只是不需要实例化一个新对象来为特定模型构建查询,但最终这仍然是一个 QueryBuider,因此它只有查询的特定方法,例如 "with" 或"get" 或 "join" 等
不要尝试对 Eloquent 模型使用查询生成器方法。没有理由做
$user->with(books) if you already fetched books using. With method does not even exists
User::with(books)->get()
从类似
的模型中保存您的模型
$user->books->save()
祝你好运
我正在尝试将 Eloquent 用于关系并且总是得到相同的结果:
Call to undefined method Illuminate\Database\Query\Builder::xxxx()
其中 xxxx 可以 "sons" 在我的模型中定义,或者如果我使用其他代码则保存 ()。
首先我有这两个模型(简化):
<?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 是未定义的 class。尽管如此,我还是可以使用一些方法。
我现在的问题。我试着用它来保存 "son" of a "user":
$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 "sons()" 有什么问题,为什么在这个项目中 Eloquent 可以是 "not defined"? (它的定义是因为我可以使用 Eloquent ORM 进行搜索或保存)
谢谢大家
当我在等待答案时 ;),我仍然遇到 Eloquent 方法的问题。我不能在多对多用户和书籍的关系中使用 $user->books()->get() 或 ->attach() 之类的东西,还有 User::with('books') 我有同样的问题
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 并使用 Eloquent。
现在我认为您对查询生成器有点困惑。您不能使用 $user->books() 因为 books 它不是一种方法,相反,当仅使用 books 时,Eloquent 使用魔术方法来获取模型属性,这意味着 table 字段或关系
当使用 User facade 时,结果将是一个 User Eloquent 模型并使用这个
$users = User::with("books")->get()
它将获取所有用户和每个用户的书籍。您现在可以通过制作
来访问您的图书$mybooks = $user->books
这可能又是某个 Eloquent 模型的 ArrayCollection。 请参阅 get() 方法特定于查询生成器,并且仅在尝试从 Db 获取数据时使用。
现在,我没有得到哨兵的部分。
这里有一些关于未来的提示
- User Facade 只是不需要实例化一个新对象来为特定模型构建查询,但最终这仍然是一个 QueryBuider,因此它只有查询的特定方法,例如 "with" 或"get" 或 "join" 等
不要尝试对 Eloquent 模型使用查询生成器方法。没有理由做
$user->with(books) if you already fetched books using. With method does not even exists User::with(books)->get()
从类似
的模型中保存您的模型$user->books->save()
祝你好运