Edit2:由于@tabacitu,该问题现在已解决。 感谢所有尝试提供帮助的人! 当我更新问题时,请参考此github线程以获取更多信息:https://github.com/Laravel-Backpack/CRUD/issues/2049
编辑:我已经在仅使用User
型号的全新背包安装上尝试过此操作。同样的问题。
在routes/backpack/custom.php
的和处添加了以下路线:
Route::get('test/{id}', 'UserCrudController@index');
这是我的网址:https://example.com/admin/test/30
然后将以下代码添加到我的UserCrudController.php
中:
$id = \Route::current()->parameter('id');
再次,这不起作用:
$this->crud->addClause('where','id', "=", $id); //produces empty result, but $id contains 30
但这确实可行:
$this->crud->addClause('where','id', "=", 30); //here I get my user with id 30.
我有一个 Article
模型,并且正在使用$this->crud->addClause('where','user_id',backpack_user()->id);
将显示的文章限制为属于当前登录用户的文章。
我现在想通过仅显示具有一定page_id
的文章来进一步过滤文章-实际上,我可以毫不费力地做到这一点:
$this->crud->addClause('where','page_id', "=", "154");
现在仅显示page_id
为154的文章。
很明显,我想要一个用于page_id的动态变量,所以我的网址看起来像这样
http://example.com/admin/articles/154
然后像这样提取最后一个参数:
$segments = request()->segments();
$page_id = $segments[count($segments)-1]; //get last segment, contains "154"
现在我的问题是,由于某种晦涩的原因,每当我尝试使用时
$this->crud->addClause('where','page_id', "=", $page_id);
该集合为空,即使$page_id
的dd()显示它已设置为 并包含“ 154”。我什至试图将$ page_id像这样转换为int,实际上它变成一个int,但仍然是相同的问题(空集合):
$page_id = (int)$segments[count($segments)-1]; //shows 154
编辑:这是dd($this->crud->query->toSql());
的输出:
//limit access to user owned models
$this->crud->addClause('where','user_id',backpack_user()->id);
//produces "select * from `articles` where `user_id` = ?"
dd($this->crud->query->toSql());
//limit entries to those with samge page_id as in URL
$page_id = \Route::current()->parameter('page_id');
$this->crud->addClause('where','page_id',$page_id);
//produces "select * from `articles` where `user_id` = ? and `page_id` = ?"
dd($this->crud->query->toSql());
感谢您的帮助!
答案 0 :(得分:2)
该是时候赏金了! :-)我在this thread中答案的副本。
您的问题很可能与AJAX数据表URL有关。它没有获取参数,因此不会应用它。
基本上:
/town_id/x
路线指向Controller::index()
CrudController::index()
仅加载视图; url($crud->route.'/search').'?'.Request::getQueryString()
路由加载信息;其中将不包含您的town_id参数;因为它使用$crud->route()
中指定的setup()
;它不包含/town_id/x
; 一种解决此问题的方法:
example.com/admin/users/?town_id=20
search()
方法应用于setup()
: if (\Route::getCurrentRoute()->getActionMethod() == 'search' && \Request::has('town_id')) {
$this->crud->addClause('where', 'select', \Request::get('town_id'));
}
覆盖Backpack提供的datatables_logic.blade.php
文件,并用$crud->route
或类似性质的文件替换Route::getCurrentRoute()
-使用Laravel的方法获取当前URL,而不是$this->crud
。这将使您的AJAX调用当前URL(而不是您使用$this->crud->setRoute()
为CRUD定义的URL)。
老实说,我会建议选择1。
答案 1 :(得分:1)
我正在安装backpack的演示并尝试过。我在#where it's dying
df = pd.read_csv(reports_directory+'/download.csv', encoding="utf-8")
df.to_sql(report_name.lower(), db.conn, index=False, if_exists="replace")
中对其进行了测试,一切都正确。
MonsterCrudController
中的问号(?)
无关紧要。
但是我的建议:
先尝试这个
dd($this->crud->query->toSql());
如果它对您不起作用,请确保跟踪您的$this->crud->addClause('where','id', "=", (int)$id);
变量。