我有用户,用户属于经销商.
在用户注册后,我正在尝试保存新用户和新经销商.
用户数据库有一dealership_id列,我想用新创建的经销商的ID填充该列.
这是我在UserControllerstore方法中的当前代码.
public function store()
{
$user = new User();
$user->email = Input::get('email');
$user->password = Input::get('password');
$dealership = new Dealership();
$dealership->name = Input::get('dealership_name');
$user->push();
return "User Saved";
}
Run Code Online (Sandbox Code Playgroud)
尝试使用$user->push();用户数据会更新,但不会创建或更新经销商.
我正在尝试使用collection filter()方法过滤以下集合:
$collection = Word::all();
Run Code Online (Sandbox Code Playgroud)
JSON输出如下所示:
[
{
"id": "1",
"word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
{
"id": "2",
"word": "sun",
"phonetic": "sun",
"mean": "s?o?ce",
"assoc": "lorem ipsun dolor sit amet",
"author_id": "3",
"user_id": "2"
}, ...
]
Run Code Online (Sandbox Code Playgroud)
但是,在过滤集合时:
$filtered_collection = $collection->filter(function($item)
{
if($item->isDog())
{
return $item;
}
});
Run Code Online (Sandbox Code Playgroud)
过滤后的集合JSON输出如下所示:
{"1":
{
"id": "1",
"word": "dog",
"phonetic": "dog",
"mean": "pies",
"assoc": "some example text",
"author_id": "3",
"user_id": "3"
},
"2":
{ …Run Code Online (Sandbox Code Playgroud) 如果我错了,请纠正我,但我认为在Eloquent模型中没有大规模更新这样的东西.
有没有办法在数据库表上进行批量更新而不为每一行发出查询?
例如,是否有静态方法,如
User::updateWhere(
array('age', '<', '18'),
array(
'under_18' => 1
[, ...]
)
);
Run Code Online (Sandbox Code Playgroud)
(是的,这是一个愚蠢的例子,但你得到的图片...)
为什么没有实现这样的功能?如果这样的事情出现,我是唯一一个会非常高兴的人吗?
我(开发人员),不喜欢实现它:
DB::table('users')->where('age', '<', '18')->update(array('under_18' => 1));
Run Code Online (Sandbox Code Playgroud)
因为随着项目的增长,我们可能会要求程序员将来更改表名,他们无法搜索和替换表名!
是否有这样的静态方法来执行此操作?如果没有,我们可以扩展Illuminate\Database\Eloquent\Model课程来完成这样的事情吗?
所以我可以用Eloquent做到这一点:
$roles = DB::table('roles')->lists('title', 'name');
Run Code Online (Sandbox Code Playgroud)
但有没有办法让Eloquent获取每个不同键而不是一列的值数组?
例如,类似于以下内容:
$roles = DB::table('roles')->lists(['*', DB:raw('COALESCE(value, default_value)')], 'name');
Run Code Online (Sandbox Code Playgroud) 我试图让我的cron来只得到Projects这是由于复发/在未来7天再次向发送提醒邮件.我刚刚发现我的逻辑不太合适.
我目前有查询:
$projects = Project::where(function($q){
$q->where('recur_at', '>', date("Y-m-d H:i:s", time() - 604800));
$q->where('status', '<', 5);
$q->where('recur_cancelled', '=', 0);
});
Run Code Online (Sandbox Code Playgroud)
但是,我意识到我需要做的是:
Psudo SQL:
SELECT * FROM projects WHERE recur_at > recur_at - '7 days' AND /* Other status + recurr_cancelled stuff) */
Run Code Online (Sandbox Code Playgroud)
我将如何在Laravel 4中执行此操作,并使用DATETIME数据类型,我只使用时间戳完成此类操作.
更新:
管理使用下面的代码后,解决这个问题,也#1时帮助你可以拉的码位看他们断章取义.
$projects = Project::where(function($q){
$q->where(DB::raw('recur_at BETWEEN DATE_SUB(NOW(), INTERVAL 7 DAY) AND NOW()'));
$q->where('status', '<', 5);
$q->where('recur_cancelled', '=', 0);
});
Run Code Online (Sandbox Code Playgroud)
更新的问题:在Laravel/Eloquent中有更好的方法吗?
更新2:
在进一步测试后,第一个决议最终没有成功,我现在已经解决并测试了以下解决方案:
$projects = Project::where(function($q){
$q->where('recur_at', '<=', Carbon::now()->addWeek());
$q->where('recur_at', '!=', "0000-00-00 00:00:00");
$q->where('status', …Run Code Online (Sandbox Code Playgroud) 是否可以在没有Laravel的情况下使用Eloquent或者是否有人知道同样易于使用的ORM?
如何在不使用查询生成器的情况下在Laravel 4中创建新的Eloquent Collection?
有一种newCollection()方法可以被覆盖,因为它只是在我们查询设置结果时才使用.
我正在考虑构建一个空集合,然后用Eloquent对象填充它.我不使用数组的原因是因为我喜欢Eloquent Collections方法,例如contains.
如果还有其他选择,我很乐意听听.
我需要更新所有行的一个数据库,以便在某一领域的所有他们等于单个值.这是一个例子.
假设我的数据库表是这样的:
id | data | confirmed
1 | someData | 0
2 | someData | 1
3 | someData | 0
Run Code Online (Sandbox Code Playgroud)
我想执行一个查询,将每行的确认字段设置为1.
我可以这样做:
$rows = MyModel::where('confirmed', '=', '0')->get();
foreach($rows as $row) {
$row->confirmed = 0;
$row->save();
}
Run Code Online (Sandbox Code Playgroud)
但似乎会有更好的方法吗?单个查询只会说"将每行'确认'字段设置为1".
Laravel的Eloquent/Fluent中是否存在这样的查询?
我正在尝试播种我的用户表.如果我这样尝试2行,它就会失败.如果我只使用单个数组而不是$ users数组中的2个数组来创建一些假数据,它就可以正常工作.
我做错了什么,这样做的正确方法是什么?
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = [
['id' => 1, 'name' => 'Stephan de Vries', 'username' => 'stephan', 'email' => 'stephan-v@gmail.com', 'password' => bcrypt('carrotz124')],
['id' => 2, 'name' => 'John doe', 'username' => 'johnny', 'email' => 'johndoe@gmail.com', 'password' => bcrypt('carrotz1243')],
];
User::create($users);
}
}
Run Code Online (Sandbox Code Playgroud)
什么laravel说:
$books = App\Book::with('author.contacts')->get();
Run Code Online (Sandbox Code Playgroud)
我需要的是这样的事情
$books = App\Book::with('author[contacts,publishers]')->get();
Run Code Online (Sandbox Code Playgroud)
我们渴望在关系中加载多个关系.
这可能吗?