我正在用 Yii (v1.1.12) 编写我的第一个应用程序,学习曲线对我来说有点陡峭,所以我需要一些帮助。
设想以下表格(及其关系):
user
是包含可以登录和使用应用程序的用户信息的表。
我已经设法(使用 Gii 和 hacking about)一个列出所有文档的 View ,并且还设法在网格中显示类别名称而不是类别 ID。
我想要实现的功能之一是允许用户切换 View ,以便 (a) 仅列出与登录用户相关的文档,或 (b) 仅列出与其部门相关的文档。
我环顾四周,但运气不佳。谁能帮忙?
干杯, 乔治
更新:目前我使用 zii.widgets.grid.CGridView
显示文档列表。
更新 2:
根据 Omar 对 CDbCriteria
的引用,我找到了 this包含有关该主题的更多详细信息的 URL。
我想出了以下模型代码,效果很好:
public function searchByUser($user_id)
{
$criteria=new CDbCriteria;
$criteria->condition = " user_id = ".$user_id;
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
public function searchByDepartment($user_id)
{
$criteria=new CDbCriteria;
$criteria->alias="p";
$criteria->join = "JOIN (SELECT u.id
FROM user u
INNER JOIN user uu
ON u.department_id = uu.department_id
WHERE uu.id = ".$user_id.") uu
ON p.user_id = uu.id";
return new CActiveDataProvider($this, array('criteria'=>$criteria,));
}
虽然上面的工作按预期进行,但我希望有一个完全不需要我编写精简 SQL 代码的解决方案。不是因为懒惰,而是为了利用框架的更多功能。
我只是觉得这种方法没有遵循最佳实践(?)。
最佳答案
尝试创建您自己的 CDBCriteria
并在其中定义任何条件,并将其作为数据提供者传递给您的 GridView 。
如果您允许在 GridView 中进行搜索,请将条件传递给搜索函数,然后在其中将传递的条件与搜索中的条件合并。
关于php - Yii-CGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345949/
我有这样的代码:$('.entrya:first').click(function(){<?phpheader("Location:"."http://www.google.com");?>});我想知道如何使用Javascript实现此目的。 最佳答案 您不能以这种方式混合使用JS和PHP,PHP在页面发送到浏览器之前呈现(即在JS运行之前)您可以使用window.location来更改当前页面。$('.entrya:first').click(funct
一.Phpstorm环境配置(1)点击左上端File,选择下拉框中的setting,进入环境配置页面,如下图(2)如下图点击1处,选中下拉框中的Deployment,Type(图示2处),下拉框中选择Localormountedfolder项,Folder(3处),选择你的项目文件文件夹上一级目录,这里为F:*\PHPTutorial\WWW(这里以实际操作者的目录为准),WebserverURL处(4处)填写为http://localhost。进入Map
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion我正在尝试计算一年中的第几天(今天或其他日期)。在PHP中,我可以使用date()函数并做任何我想做的事...在JS/jQuery中有类似的东西吗?
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我使用Laravel已经有一段时间了,我爱上了Carbon时间戳实例,以及操作它们并将它们转换为人类可读的日期以进行显示是多么容易。但现在我正在做一个前端与后端完全分离的项目,我无法调用CarbonAPI方法将日期转换为人类可读的格式。是否有一个Javascript库可以执行与Carbon相同的操作,以便我可以在前端模板中使用它并将人类可读的时间格式注入(inject
我想知道如何使用Javascript将UTF-8中的字符“翻译”为最接近的ASCII等效字符,就像PHP中的Iconvdost一样。例子:ü变成你ó变成o我宁愿不使用替换,因为a)它需要一整套字符,这需要大量工作b)我很难获得一整套字符,我会永远不确定我是否遗漏了一两个。 最佳答案 我找到的最简单的方法:varstr="üó";varcombining=/[\u0300-\u036F]/g;console.log(str.normalize('NFKD').replace(combining,'
jQuery或JavaScript中是否有功能与PHP中的strstr()功能相同的函数?我有一个AJAX响应,应该是1、2、3、12、13、23或123。我想检查1是否存在,然后2是否存在,然后3是否存在。 最佳答案 尝试使用这个:functionstrstr(haystack,needle,bool){//Findsfirstoccurrenceofastringwithinanother////version:1103.1210//discussat:http://phpjs.org/functions/strstr//+or
我正在将javascript注入(inject)PHP网站以避免弹出窗口,以自动提交表单。此外,jquery存在问题,因此我使用普通的javascript。这是页面上的表单:<formaction='http://mywebsite.com/index.php?&act=MYFUNCTION&CODE=01&CookieDate=1'name='subscribe_check'method='POST'><inputtype='hidden'name='value1'
我正在使用map插件来呈现一些数据。数据来自数据库并存入一个json文件——脚本运行良好。我决定直接使用php输出的数据,而不是制作一个json文件。出于某种原因,javaScript不接受直接的php输入。我正在使用codeigniterMVC以下是当前可用的示例代码:$.getJSON('_data/index/data.json',function(data){...这是我尝试过的:vardataMap='<?print$mapData;?>';$.getJSON(dataMap,function(data){...*编辑2*根据答案-
目录1.IIS6.x解析漏洞2.IIS7.x解析漏洞3.HTTP.SYS远程代码执行漏洞MS15-0344.IIS-PUT任意文件写入5.短文件名漏洞1.IIS6.x解析漏洞(1)该版本默认会将*.asp;.jpg此种格式的文件名,当成Asp解析,原理是服务器默认不解析;号及其后面的内容,相当于截断。(2)该版本默认会将*.asp/目录下的所有文件当成Asp解析。修复:微软认为这不是一个漏洞,所以要自己修复。限制上传目录执行权限,不允许执行脚本。不允许新建
我想做的是str.replace(pattern,callback),不仅仅是str.replace(pattern,replace_pattern),可以用javascript实现吗? 最佳答案 为什么,是的,您完全可以这样做:str.replace(pattern,function(){...})。这是一些文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_f
我正在尝试使用从查询参数到搜索对象的模型绑定(bind)。我的搜索对象是[DataContract]publicclassCriteria{[DataMember(Name="first_name")]publicstringFirstName{get;set;}}我的Controller有以下Action[Route("users")]publicclassUserController:Controller{[HttpGet("search")]publicIActionResultSearch([FromQuery]Criteriac
我想一般地展平一些json,以便我可以转换为数据表并使用c#绑定(bind)到数据网格考虑到我不知道要下降多少级别,最好的方法是什么?例如{"appointmentid":4,"policyid":1,"guid":"00000000-0000-0000-0000-000000000000","number":"1234567890","ampm":"false","date":"2015-09-08T00:00:00",
我卡住了..Razor不再在VS2013中工作,我在浏览器中收到此消息:我相信它在消息中missingasectiondeclaration但我不知道是什么做..请帮忙!!HTTPError500.19-InternalServerErrorTherequestedpagecannotbeaccessedbecausetherelatedconfigurationdataforthepageisinvalid.ModuleIISWebCoreNotificationUnknownHandlerNotyetdeterminedErrorCode0x80070032ConfigErrorT
我目前正在使用T4模板,我注意到有时代码缩进不正确,我该如何避免这种情况?例如我在模板中有这段代码}<#}#>this.cmbDecisionList.Dat=dataSource;this.btnDec.Enabled=dataSource.Count>0;}在生成的类中它就像}this.cmbDecisionList.Dat=dataSource;this.btnDec.Enabled=dataSource.Count>0;} 最佳答案 请允许我用点替换空格来说明您的问题。}....<#}#>
List<int>_lstNeedToOrder=newList<int>();_lstNeedToOrder.AddRange(newint[]{1,5,6,8});//Ineedtosortthisbasedonthebelowlist.List<int>_lstOrdered=newList<int>();//toorderbythislist_lstOrdered.AddRange(newint[]{13,5,11,1,4,9,2,7,12,10,3,8,6});orderwillbe-->_lstNeedToOrder=5
我有下面的代码,我需要将一个字符串转换为同样从String指定的类型:Typet=Type.GetType("System.Nullable`1[[System.DateTime,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]");objectd=Convert.ChangeType("2012-02-2310:00:00",t);我收到以下错误消息:Invalidcastfrom'System.String'to'System.
我有一种形式的数据绑定(bind)检查列表框,我想知道是否有可能将每个列表框项的复选框与对象的特定属性进行数据绑定(bind)。提前感谢您的帮助:)编辑:也许我的问题被误解了。我想知道是否可以对CheckedListBox的每个项目的复选框进行数据绑定(bind)。我知道如何将数据绑定(bind)到源以及如何通过迭代itmes以编程方式更改条目。我不知道是否有可能上课它实现了INotifyPropertyChanged,因此当“CheckedState”属性更改时,CheckedListBox会自行更新。 最佳答案 根据Samich
当我尝试添加Venue对象并调用SaveChanges()时,我不明白为什么会出现此错误。模型中与Venue对象的唯一区别是它们与City是1对1..0关系。Citycity=ProcessCityCache(ev,country,db);//Afterthiscall,'city'isalreadypersisted.venue=newVenue{TicketMasterURL=ev.VenueSeoLink,Name=Capitalize(ev.VenueName),City=city};db.Venues.AddObject(venue);db.SaveChang
我的代码中有以下结构Dictionary<TKeys,TValues>data;.我对这两种数据类型都运行了一些LINQ查询,并且经常需要在Keys之间切换和Values.获取给定值的键列表的最佳方法是什么,反之亦然?请注意,由于我以前的LINQ查询,我通常有'IEnumerable'和'IEnumerable'并且想要像IEnumerable<TKeys>Dictionary.GetAllKeys(IEnumerable<IValues>vals)这样的东西和IEnumerable<TValues>Dictionary.GetAllVa
.NETFramework定义了一个System.IO.Path.GetTempFileName方法,该方法保证它生成的临时文件名是唯一的。据我所知,尽管极不可能,但此文件名可能与同一路径中的目录名称相同,这意味着我不能通过采用该文件的名称来假设,删除它,并创建一个同名的目录,我将拥有一个与任何其他目录具有唯一名称的目录。此外,我无法指定GetTempFileName应在其下创建其临时文件的路径。对于目录,似乎没有与GetTempFileName等效的函数。是否有GetTempFileName等效于创建唯一目录?如果没有,在指定位置创建唯一目录的最佳方法是什么(即我指定创建唯一目录的路