如何在Laravel中进行此查询:
SELECT
`p`.`id`,
`p`.`name`,
`p`.`img`,
`p`.`safe_name`,
`p`.`sku`,
`p`.`productstatusid`
FROM `products` p
WHERE `p`.`id` IN (
SELECT
`product_id`
FROM `product_category`
WHERE `category_id` IN ('223', '15')
)
AND `p`.`active`=1
Run Code Online (Sandbox Code Playgroud)
我也可以通过连接来做到这一点,但我需要这种格式来提高性能.
我正在尝试使用"language> {language}> validation.php"中的验证属性来替换正确读取名称的:属性名称(输入名称)(例如:first_name>名字).使用起来似乎很简单,但验证器没有显示"好名字".
我有这个:
'attributes' => array(
'first_name' => 'voornaam'
, 'first name' => 'voornaam'
, 'firstname' => 'voornaam'
);
Run Code Online (Sandbox Code Playgroud)
用于显示错误:
@if($errors->has())
<ul>
@foreach ($errors->all() as $error)
<li class="help-inline errorColor">{{ $error }}</li>
@endforeach
</ul>
@endif
Run Code Online (Sandbox Code Playgroud)
并在控制器中进行验证:
$validation = Validator::make($input, $rules, $messages);
Run Code Online (Sandbox Code Playgroud)
$ messages数组:
$messages = array(
'required' => ':attribute is verplicht.'
, 'email' => ':attribute is geen geldig e-mail adres.'
, 'min' => ':attribute moet minimaal :min karakters bevatten.'
, 'numeric' => ':attribute mag alleen cijfers bevatten.'
, 'url' => …Run Code Online (Sandbox Code Playgroud) 我刚刚开始学习Laravel框架,我遇到了路由问题.
唯一有效的路线是开箱即用的Laravel附加的默认本地路由.
我在Windows上使用WAMP,它使用PHP 5.4.3和Apache 2.2.22,我也启用了mod_rewrite,并从application.php配置文件中删除了'index.php'以留下空字符串.
我创建了一个名为User的新控制器:
class User_Controller extends Base_Controller {
public $restful = true;
public function get_index()
{
return View::make('user.index');
}
}
Run Code Online (Sandbox Code Playgroud)
我在application/views/user /中创建了一个视图文件,名为index.php,带有一些基本的HTML代码,在routes.php中我添加了以下内容:
Route::get('/', function () {
return View::make('home.index');
});
Route::get('user', function () {
return View::make('user.index');
});
Run Code Online (Sandbox Code Playgroud)
http://localhost/mysite/public在我的Web浏览器中访问root()时,第一条路径工作正常,但是当我尝试转到第二条路径时,http://localhost/mysite/public/user我收到404 Not Found错误.为什么会这样?
我有这个站点,其中一个页面从数据库中创建一个简单的人员列表.我需要将一个特定的人添加到我可以访问的变量中.
如何修改该return $view->with('persons', $persons);行以将$ ms变量传递给视图?
function view($view)
{
$ms = Person::where('name', 'Foo Bar');
$persons = Person::order_by('list_order', 'ASC')->get();
return $view->with('persons', $persons);
}
Run Code Online (Sandbox Code Playgroud) 我在路由方面遇到了一些麻烦.
我正在使用CMS,我需要两条主要路线./admin和/(:any).该admin控制器用于路由/admin和view控制应该用于任何东西比其他/admin.从view控制器,那么我就要解析URL并显示正确的内容.
这就是我所拥有的:
Route::get(array('admin', 'admin/dashboard'), array('as' => 'admin', 'uses' =>'admin.dashboard@index'));
Route::any('(:any)', 'view@index');
Run Code Online (Sandbox Code Playgroud)
第一条路线有效,但第二条路线没有.我玩了一下它,似乎如果我使用(:any)没有问号,它只有在我放了一些东西后才有用/.如果我这样做把问号在那里,它不会在所有的工作.
我想要以下所有路由去查看@index:
/
/something
/something/something
/something/something/something
/something/something/something/something
...etc...
Run Code Online (Sandbox Code Playgroud)
这可能没有硬编码一堆(:any?)/(:any?)/(:any?)/(:any?)(我甚至不知道工作)?
最好的方法是什么?
如果我的问题的答案显而易见,请提前道歉.在我发布这篇文章之前,我已经在研究这个主题时做了尽职调查.
我的大多数框架体验来自使用CodeIgniter,所以我从未有过使用ORM的实践经验.(CI确实有一些现成的ORM解决方案,但我从未使用它们.)
我想在Laravel的Eloquent ORM中使用内置的ORM功能,在运行查询时自动将锦标赛和国家/地区表连接在一起,并返回包含锦标赛数据及其相关国家/地区数据的数据集.
也就是说,我希望Eloquent自动识别外键关系,以便我可以运行查询(例如,Tournament :: with('Country') - > all())将返回整套锦标赛和国家/地区数据.
如果我以一种从未打算使用的方式使用Eloquent,请立即停止我!我的困惑可能更多的是我试图将一个难以维持的解决方案混合在一起而不是语法或编码错误.
SELECT * FROM tournaments LEFT JOIN countries ON tournaments.country_id = countries.id
Run Code Online (Sandbox Code Playgroud)
我希望收到一系列Tournament对象(在PHP中),其中单个Tournament对象如下所示:
我在虚拟控制器方法中运行了所有这些尝试,并将结果作为格式化字符串输出到分析器.
虚拟控制器中的PHP代码:
$tournaments = Tournament::with('Country')->all();
Run Code Online (Sandbox Code Playgroud)
生成以下查询:
SELECT * FROM `tournaments`
Run Code Online (Sandbox Code Playgroud)
尝试#1返回:
包含Tournament对象的数组,仅包含锦标赛表中的列.
虚拟控制器中的PHP代码:
$tournaments = Tournament::with('Country')->first();
Run Code Online (Sandbox Code Playgroud)
生成以下错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'tournament_id' in 'where clause'
SQL: SELECT * FROM `countries` WHERE `tournament_id` IN (?)
Bindings: array ( …Run Code Online (Sandbox Code Playgroud) 我需要更新所有行的一个数据库,以便在某一领域的所有他们等于单个值.这是一个例子.
假设我的数据库表是这样的:
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中是否存在这样的查询?
默认情况下,Laravel的原始查询方法将结果作为stdClass对象的数组返回:
Array
(
[0] => stdClass Object
(
[id] => 1
[username] => admin
[password] => admin123
[email] => admin@admin.com
[created_at] => 2012-12-06 18:57:19
[updated_at] => 2012-12-06 00:00:00
)
[1] => stdClass Object
(
[id] => 2
[username] => userna
[password] => user
[email] => user@gmail.com
[created_at] => 2012-12-06 00:00:00
[updated_at] => 2012-12-05 00:00:00
)
)
Run Code Online (Sandbox Code Playgroud)
问题是如何让Laravel返回一个数组数组:
Array
(
[0] => Array
(
[id] => 1
[username] => admin
[password] => admin123
[email] => admin@admin.com
[created_at] => 2012-12-06 18:57:19
[updated_at] …Run Code Online (Sandbox Code Playgroud) 我正在尝试让我的默认模板与Laravel一起使用.我来自Codeigniter和Phil Sturgeon的模板系统,所以我试图以类似的方式做到这一点.任何人都可以帮我解决我错过/做错的事吗?谢谢!
//default.blade.php (located in layouts/default)
<html>
<title>{{$title}}</title>
<body>
{{$content}}
</body>
</html>
//end default.blade.php
//home.blade.php (index view including header and footer partials)
@layout('layouts.default')
@include('partials.header')
//code
@include('partials.footer')
//end home
//routes.php (mapping route to home controller)
Route::controller( 'home' );
//end
//home.php (controller)
<?php
class Home_Controller extends Base_Controller {
public $layout = 'layouts.default';
public function action_index()
{
$this->layout->title = 'title';
$this->layout->content = View::make( 'home' );
}
}
//end
Run Code Online (Sandbox Code Playgroud)