让我们说我们正在使用Laravel的查询构建器:
$users = DB::table('really_long_table_name')
->select('really_long_table_name.id')
->get();
Run Code Online (Sandbox Code Playgroud)
我正在寻找这个SQL的等价物:
really_long_table_name AS short_name
Run Code Online (Sandbox Code Playgroud)
当我必须输入大量的选择和数据时,这将特别有用(或者通常我也会在select的列别名中包含别名,并且它会在结果数组中使用).没有任何表别名,我会有更多的输入,一切都变得不那么可读.在laravel docs中找不到答案,有什么想法吗?
我在编写查询时遇到问题laravel eloquent ORM.
我的疑问是
SELECT book_name,dt_of_pub,pub_lang,no_page,book_price
FROM book_mast
WHERE book_price NOT IN (100,200);
Run Code Online (Sandbox Code Playgroud)
现在我想将此查询转换为laravel eloquent.
我只是无法解决这个问题.
我正在使用Linode 1G RAM基本计划.试图通过Composer安装一个包,它不会让我.我的内存限制在PHP.ini上设置为"-1"
我还能做些什么来安装它吗?
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing thujohn/rss (dev-master df80a7d)
Downloading: 100%
PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975
Fatal error: …Run Code Online (Sandbox Code Playgroud) 我阅读文档的Laravel网站,堆栈溢出,并且谷歌,但还是不明白之间的差别Route::resource和Route::controller.
其中一个答案说Route :: resource是为了crud.但是,使用Route :: controller,我们可以完成与Route :: resource相同的操作,我们只能指定所需的操作.
他们看起来像兄弟姐妹:
Route::controller('post','PostController');
Route::resource('post','PostController');
Run Code Online (Sandbox Code Playgroud)
我们如何选择使用什么?什么是好习惯?
我的猜测是使用以下语法:
MyModel::all()->delete();
Run Code Online (Sandbox Code Playgroud)
但那没用.我确信它非常简单,但我已经搜索了关于这个主题的文档而无法找到它!
假设每当我进行CRUD操作或以特定方式修改关系时,我也想做其他事情.例如,每当有人发布帖子时,我也想将某些内容保存到表中进行分析.也许不是最好的例子,但总的来说有很多这种"分组"的功能.
通常我会将这种逻辑放入控制器中.在你想要在很多地方重现这个功能之前,这一切都很好.当你开始进入局部,创建一个API并生成虚拟内容时,就会出现干涸问题.
我看到管理它的方法是事件,存储库,库和添加到模型.以下是我对每个人的理解:
服务:这是大多数人可能会放置此代码的地方.我对服务的主要问题是,有时很难在其中找到特定功能,我觉得他们会忘记人们何时专注于使用Eloquent.我怎么知道我需要publishPost()在库中调用方法$post->is_published = 1?
我看到这个工作得很好的唯一条件是,如果你只使用服务(理想情况下,Eloquent不能以某种方式从控制器一起无法访问).
最终,如果您的请求通常遵循您的模型结构,这似乎只会创建一堆额外的不必要的文件.
存储库:从我的理解,这基本上就像一个服务,但有一个接口,所以你可以在ORM之间切换,我不需要.
事件:从某种意义上说,我认为这是最优雅的系统,因为你知道你的模型事件总是会在Eloquent方法中被调用,所以你可以像往常一样编写你的控制器.我可以看到这些变得混乱,如果有人有大型项目的例子使用事件进行关键耦合,我希望看到它.
模型:传统上我会有类执行CRUD并处理关键耦合的类.这实际上让事情变得简单,因为你知道CRUD的所有功能+无论如何都要做到这一点.
很简单,但在MVC架构中,这通常不是我所看到的.从某种意义上说,虽然我更喜欢这种服务,因为它更容易找到,而且需要跟踪的文件较少.但它可能会有点混乱.我想听听这种方法的失败,以及为什么大多数人似乎都没有这样做.
每种方法有哪些优点/缺点?我错过了什么吗?
在阅读了T. Otwell关于Laravel优秀设计模式的书之后,在Laravel 4中创建应用程序时,我发现自己为应用程序中的每个表创建了存储库.
我最终得到了以下表格结构:
我有所有这些表的查找,创建,更新和删除方法的存储库类.每个存储库都有一个与数据库交互的Eloquent模型.根据Laravel的文档,模型中定义了关系:http://laravel.com/docs/eloquent#relationships .
在创建新课程时,我所做的就是在课程资源库中调用create方法.该课程有作业,因此在创建作业时,我还想在课程中为每个学生在乐谱表中创建一个条目.我是通过Assignment Repository完成的.这意味着赋值存储库使用Assignment和Student模型与两个Eloquent模型进行通信.
我的问题是:由于此应用程序的大小可能会增加并且会引入更多关系,因此在存储库中与不同的Eloquent模型进行通信是一种好的做法,还是应该使用其他存储库来完成(我的意思是从Assignment存储库调用其他存储库) )还是应该在Eloquent模型中一起完成?
此外,将分数表用作作业与学生之间的转轴还是应该在其他地方完成,这是一种好习惯吗?
我们如何为测试服务器设置自定义端口?
通常我们这样做的时候
php artisan serve
Run Code Online (Sandbox Code Playgroud)
该文件夹服务为:
localhost:8000
Run Code Online (Sandbox Code Playgroud)
我们怎样才能访问一个文件夹:
localhost:8080
Run Code Online (Sandbox Code Playgroud)
我想在我的localhost上访问两个不同的开发站点.
我的laravel网站以前工作过,我最近升级到了Apache 2.4和PHP 5.5.7.
现在,我得到一个白色的空白屏幕,当我去laravel.mydomain.com,没有在Apache的错误日志,路线等应该不错,因为之前的工作.
当我向/var/sites/laravel/public/.htaccess插入无效行时,.htaccess正在加载,因为我得到500.
继承人我的.htaccess:
$ cat /var/sites/laravel/public/.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Run Code Online (Sandbox Code Playgroud)
继承我的虚拟主机指令:
DocumentRoot "/var/sites/laravel/public"
ServerName laravel.mydomain.com
<Directory "/var/sites/laravel/public">
AllowOverride All
allow from all
Options +Indexes
Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)
和apachectl -S
$ /usr/local/apache2/bin/apachectl -S
VirtualHost configuration:
*:* is a NameVirtualHost
default server mydomain.com (/usr/local/apache2/conf/extra/httpd-vhosts.conf:25)
port * namevhost mydomain.com (/usr/local/apache2/conf/extra/httpd-vhosts.conf:25)
port * …Run Code Online (Sandbox Code Playgroud) 我想尝试一些非常基本的运行.我已经习惯了CI,现在正在学习Laravel 4,他们的文档并不容易!无论如何,我正在尝试创建一个登录表单,并确保通过在下一个表单中打印它来成功发布数据.我得到这个例外:
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
和我的MemberController.php:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
Run Code Online (Sandbox Code Playgroud)
和路线有:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
Run Code Online (Sandbox Code Playgroud)
最后我的观点login.php有这个表单方向:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.