一对一使用 hasOne | 反向 belongsTo |
一对多使用 hasMany | 反向 belongsTo |
多对多使用 belongsToMany | 反向 BelongsToMany |
标签: laravel
-
Laravel Eloquent 中的一对一,一对多,多对多
-
Laravel网站根目录权限设置
for directories
find . -type d -print0 | xargs -0 chmod 0755
for files
find . -type f -print0 | xargs -0 chmod 0644
chown -R www-data:www-data *
把当前文件夹也加入php-fpm用户组
chown -R www-data:www-data .
更改 storage 文件夹权限
chmod -R 0755 storage
-
使用 Composer 升级 Laravel Installer
安装laravel installer, 如果已经安装了,这一步略过
composer global require laravel/installer
更新larvel installer
composer global update laravel/installer
查看全局安装了哪些包以及相关信息
composer global show
也可以用
laravel --version
查看安装器的版本
-
Hello, Laravel
经过一周的紧张开发,又一个面向银行的内部系统总算完成了。这个系统本来打算是用 .NET 来做,但这段时间一直心心念念 Laravel 框架,就像所有趁手好用的工具一样,只要用过一次,就忘不掉她的好。
经过简单分析,发现这个系统其实并没有复杂的业务和计算,由于是内部系统,也不存在高并发的可能,所以,对于 Laravel 是适用的。本来 .NET 开发的系统已经完成了 70% ,花了一周不到的时间就用 Laravel 重写完成了,不得不感慨开发速度之快,同时开发体验拉满。
这么多年来,虽说 PHP 也在断断续续的用,但从没怎么把它当回事,一般的项目主要还是使用 .NET 来做。对于自由开发者来说,.NET 可谓是相当的万金油,既可以做桌面开发,也可以做 Web 开发,关键时刻还可以拿来写一写安卓移动应用。由于是静态编译型语言,性能基本够用,配合 SQL Server 数据库,基本没有做不了的项目。
但是,自从知道 Laravel 框架后,就在慢慢地在不断了解,越了解就越被她的优雅所打动,这里我也用了优雅这个词,因为实在没有想到更好的词能描述那种感觉。直到去年,尝试用她开发了一个小项目,由于当时对 Eloquent 了解还不够深入,甚至多对多、一对多这种关系的用法还不太清楚,就强行上了,结果也还行,顺顺利利的开发完成。
这次的项目开发,在彻底弄清了 Eloquent 之后,就果断切换到 Laravel 来开发,真的是太好用了,再也不用定义 ASP.NET 里面的那一堆堆的实体类,再也不再需要 AutoMapper,再也不用那蹩脚的表单验证,再也不用等待编译生成,等等好处无法一一言说。总之就是开发轻量了,保存即生效,刷新即可看效果,整个过程轻松加愉快,身心愉悦!
当然,Laravel 并不是完美的,并不适用于所有场景,比如高并发场景,计算密集、IO密集型应用,对于这些场景和应用,Laravel 不是不能做,而是不够好,性能不够高!当然,这不能怪 Laravel,这是 PHP 的问题,什么时候等 PHP 进化出高性能的运行模式,那 Laravel 就是完美的。
最后,程序语言、程序框架始终是工具,只有根据需求和场景选择合适的工具才是真理。
后记:该项目最终使用ASP.NET Core重新开发,重业务的项目还是要使用强类型语言,懂得都懂,不解释。
-
Laravel 9 安装中文语言包
首先使用 composer 安装依赖包:
composer require laravel-lang/publisher laravel-lang/lang laravel-lang/attributes --dev
注意
laravel-lang/publisher
这个包需要 php 8.1 版本才行,如果是 php 8.1 以下版本,要使用如下命令来安装旧版:composer require laravel-lang/publisher:^13.0 laravel-lang/lang:^10.9 laravel-lang/attributes:^1.1
然后使用下面的命令把中文语言包添加到 lang 目录下:
php artisan lang:add zh_CN
最后修改配置文件 config/app.php,来使用中文。
'locale' => 'zh_CN',
注:本文基于 Laravel Framework 9.33.0 版本测试通过。
参考链接:
https://github.com/Laravel-Lang/lang
https://publisher.laravel-lang.com/installation/ -
更新laravel框架
composer update laravel/framework
-
在blade中获取route名称
在laravel的blade视图中,想要获取route名称,可以使用下面的代码:
Route::currentRouteName()
-
Laravel无法加载.env的问题
在万网虚拟主机上,发现laravel无法加载.env中配置的信息,然后一路跟踪发现,问题出在PHPDotEnv这个库上
在Loader.php里有一个函数如下:public function setEnvironmentVariable($name, $value = null) { list($name, $value) = $this->normaliseEnvironmentVariable($name, $value); // Don't overwrite existing environment variables if we're immutable // Ruby's dotenv does this with `ENV[key] ||= value`. if ($this->immutable && $this->getEnvironmentVariable($name) !== null) { return; } putenv("$name=$value"); $_ENV[$name] = $value; $_SERVER[$name] = $value; }
里面使用了
putenv
函数,这个函数是用于设置或修改环境变量的,目的是把.env里面的配置放到环境变量里面。通过var_dump
查看返回值发现都是NULL, 可以猜测万网虚拟主机应该是禁用了putenv
这个函数。解决办法就是放弃使用.env文件,把里面的一些配置信息放到
config/app.php
里面去。 -
Laravel不同设备使用不同的视图
使用composer添加第三方库
jenssegers/agent
// language: bash composer require jenssegers/agent
然后在app/config/app.php 里的服务提供者数组里添加该库, 并添加别名
// language: php 'providers' => [ Jenssegers\Agent\AgentServiceProvider::class, ] 'aliases' => [ 'Agent' => Jenssegers\Agent\Facades\Agent::class, ]
使用artisan创建一个服务提供者类
php artisan make:provider ResponseMacroServiceProvider
同样要在app.php里面配置
// language: php 'providers' => [ App\Providers\ResponseMacroServiceProvider::class, ] // 别名用不到,不用配置了
修改
app/Providers/ResponseMacroServiceProvider.php
的boot
方法// language: php public function boot(ResponseFactory $factory) { $factory->macro('ress', function ($viewname) use ($factory) { if ( Agent::isMobile() ) { return view()->make($viewname . "_mobile"); } else { return view()->make($viewname . "_web"); } }); }
在Controller中可以这样使用
// language: php class HomeController extends Controller { public function index() { return response()->ress('home.index'); //return view('home.index'); } public function article() { return response()->ress('home.article'); } }
最后就是把视图名改为 _web.blade.php 和 _mobile.blade.php