laravel 实战踩坑——随笔
1. 表单提交必填method,action,{{csrf_field()}}
2. index.php无法打开文件的话,进项目composer install
3. 数据库默认字段不为空,报错的时候应该看一看
4. 所有前端引用前面要加/表示绝对路径引用,不然无法渲染
5. 如果路由和控制器都没写错,还报错方法不存在,可以尝试:
composer dumpautoload
rm -rf vendor/laravel
composer update
6. 更改不了字段可能是没有添加fillable
7. 用查询构造器得到的是collection,要取数据需要用到collection的方法转化成数组toArray()
但是请注意!!!toArray()直接转换应该是这个样子的,比如说你用get()再toArray():
$collection = collect(['name' => 'Desk', 'price' => 200]);
$collection->toArray();
/*
[
['name' => 'Desk', 'price' => 200],
]
*/
看到没,这里有两个中括号,意思是把能数组化的东西都给数组化了。所以取键值就得注意了。
8. 更改belongsTo的外键和对应键:直接看例子比较好懂
Eloquent 会尝试用 Comment 模型的 post_id 与 Post 模型的 id 进行匹配。默认外键名是 Eloquent 依据关联名、并在关联名后加上 _id 后缀确定的。当然,如果 Comment 模型的外键不是 post_id,那么可以将自定义键名作为第二个参数传递给belongsTo方法.如果父级模型没有使用 id 作为主键,或者是希望用不同的字段来连接子级模型,则可以通过给 belongsTo方法传递第三个参数的形式指定父级数据表的自定义键:
public function post()
{
return $this->belongsTo('App\Post', 'foreign_key', 'other_key');
}
9. 使用$tagsWithArticles = Tag::take(10)->get()->belongsToManyArticle()->get();
这里会得到一个非常复杂的对象,可以自行 var_dump()。跟大家说一个诀窍,var_dump() 以后,用 Chrome 右键 “查看源代码”,就可以看到非常整齐的对象/数组展开了。或者dd()随意
10. 多对多关联外键全是各自表的id字段,所以对应要取id字段的值才能取出对象。
11. 卧槽妈的下次别老怀疑是路由注入出错行不行!!!因为没有改掉fillable属性,批量更改数据不成功debug了1h….
12. 再次补充路由注入坑,因为laravel在路由绑定后往控制器中注入实例的时候,如果不是刚好匹配默认是注入不成功的。如果要自定义注入,需要在app/providers/routeservice.php里的boot()方法中添加:比如说
public function boot()
{
parent::boot();
Route::model('users', User::class);
Route::model('courses',Course::class);
}
如果不加这一条,那么路由必选参数的注入会出现这种问题:
Route::get('users/{users}/courses/{courses}/tasks','TasksController@stshow')->name('tasks.stshow');
使用时如果选择:
{{route('tasks.stshow',['user'=>Auth::user(),'course'=>$course])}}
那么访问可以成功,但是注入实例会失败. 或者把路由字段改成
Route::get('users/{user}/courses/{course}/tasks','TasksController@stshow')->name('tasks.stshow');
那就不需要更嘎boot()方法的内容。总算是清楚了