在Laravel中,有没有办法区分firstOrCreate创建行,如果找出之前存在的行?
或者我必须先手动执行get(),然后创建行?
我理想地寻找像这样的功能
load('relationship')
Run Code Online (Sandbox Code Playgroud)
但是以相同的方式加载计数
withCount('relationship')
Run Code Online (Sandbox Code Playgroud)
适用于急切加载.
我想它会被称为 loadCount('relationship')
我一直在阅读这个功能:http://laravel.com/docs/html#form-model-binding
它看起来很整洁,但有几件我不确定的事情.
我是否需要在控制器操作中放置任何代码来处理此表单?那是什么样的?
我想在我的表单中绑定的模型(用户)有一个单独的地址表.所以我希望能够填写用户模型的字段,还能填写相关地址模型的字段.我可以使用表单模型绑定来执行此操作,还是必须手动处理表单?
或者,如果不这样做,我可以对用户字段使用表单模型绑定,但是手动处理地址字段吗?
有谁知道是否可以做以下事情:
假设我们有一个名为User的模型和一个名为BestFriend的模型.用户与最好的朋友之间的关系是1:1.
我希望这些案例能够做到这样的事情,同时改变我的城市和我朋友的城市.
$me = User::find(1);
$me->update(array(
'city' => 'amsterdam',
'bestfriend.city' => 'amsterdam'
));
Run Code Online (Sandbox Code Playgroud)
所以基本上我想知道Eloquent是否足够聪明,能够理解基于数组键'bestfriend.city'的关系.
在此先感谢您的帮助!
更新:
在Laravel论坛上找到解决方案,但我也在这里发布,如果其他人正在寻找相同的东西:)
在您添加的模型中
// In your model...
public function setBestFriendArrayAttribute($values)
{
$this->bestfriend->update($values);
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以这样称呼它
$me->update(array(
'city' => 'amsterdam',
'BestFriendArray' => array(
'city' => 'amsterdam'
)
));
Run Code Online (Sandbox Code Playgroud)
奇迹般有效!
使用Eloquent ORM我的模型设置如下: Post belongsToMany Category
post.php中
public function categories()
{
return $this->belongsToMany('Category', 'posts_categories');
}
Run Code Online (Sandbox Code Playgroud)
我想按类别关系的列过滤帖子.
所以我想做一些事情:
$posts->where('categories.slug', '=', Input::get('category_slug'));
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
我也尝试过:
$with['categories'] = function($query){
$query->where('slug', '=', Input::get('category_slug'));
};
$posts::with($with)->get();
Run Code Online (Sandbox Code Playgroud)
但我认为这是为了过滤不按类别过滤的类别.
有谁能告诉我的方式?
我正在尝试在我的Laravel应用程序中进行查询,并且我想为查询使用常规结构.这个类要么使用Eloquent所以我需要找到一些完全原始的查询.
可能是这样的Model::query($query);.只有这不起作用.
以下软删除代码对我来说很好:
$post = Post::find($post_id);
$post->delete();
Run Code Online (Sandbox Code Playgroud)
deleted_at字段已更新.但这给了我一个错误:
$post = Post::find($post_id);
$post->restore();
Run Code Online (Sandbox Code Playgroud)
这是错误:
exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function restore() on a non-object'
Run Code Online (Sandbox Code Playgroud)
我很难过.到目前为止谷歌没有帮助.
我想在Eloquent和Laravel找到一个优雅的方式来说
select * from UserTable where Age between X and Y
Run Code Online (Sandbox Code Playgroud)
在Eloquent中有一个介于操作员之间(我找不到它).
我到目前为止最接近的是像这样追查我的查询
$query->where(age, '>=', $ageFrom)
->where(age, '<=', $ageTo);
Run Code Online (Sandbox Code Playgroud)
我也遇到了似乎有效的R.Raw
$query->whereRaw('age BETWEEN ' . $ageFrom . ' AND ' . $ageTo . '');
Run Code Online (Sandbox Code Playgroud)
是否存在处理范围的实际雄辩方式(非原始方式)?
我用搜索参数调用URL是动态的.我怎么能形成适当的Eloquent查询?
理论上:
我需要这种结构,所以如果param存在,我可以使用where子句.如果Laravel有其他方式,请告诉我.
在Laravel 5.1中,对于MySQL插入,我想查看记录是否已经存在并在重复时更新,或者如果不存在则创建新的.
我已经搜索了那里的答案是旧的laravel版本.在其中一个老话题中,它说updateOrCreate()去年核心增加了一种新方法.但是当我尝试这个时,我收到了错误:
Integrity constraint violation: 1062 Duplicate entry '1' for key 'app_id'
Run Code Online (Sandbox Code Playgroud)
这是我使用的查询:
AppInfo::updateOrCreate(array(
'app_id' => $postData['appId'],
'contact_email' => $postData['contactEmail']
));
Run Code Online (Sandbox Code Playgroud)
app_id该表中的唯一外键在哪里,我想更新记录(如果存在)或创建新记录.我试过搜索5.1文档但找不到我需要的信息.有人可以在这里指导我吗...