GVKun编程网logo

php – Doctrine select with null

10

最近很多小伙伴都在问php–Doctrineselectwithnull这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展asp.net-mvc-3–在Post上,下拉列表Selec

最近很多小伙伴都在问php – Doctrine select with null这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null、c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件、Doctrine CLI输出doctrine.php的内容、doctrine-orm – Doctrine 2:写一个合适的Subselect等相关知识,下面开始了哦!

本文目录一览:

php – Doctrine select with null

php – Doctrine select with null

是否有可能执行以下操作:

$builder = $this->getEntityManager()->createqueryBuilder();
$builder->select(
        'f.id',...
        'NULL AS missing_attribute'
    )
    ->from(...,'f')
    ...;

并避免:

Doctrine\ORM\Query\QueryException: ... got 'NULL'

解决方法

您可以通过直接使用DBAL连接并发出正常的SQL查询来实现您的目标.

查询构建器用于生成DQL(域查询语言),并且此空字段不是域的一部分.

或者只选择它而不使用NULL字段并运行结果并手动添加它.

asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null

asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null

我的模型如下:
public class testCreateModel
{
    public string s1 { get; set; }
    public SelectList DL { get; set; }

    public testCreateModel()
    {
        Dictionary<string,string> items = new Dictionary<string,string>();
        items.Add("1","Item 1");
        items.Add("2","Item 2");
        DL = new SelectList(items,"Key","Value");
    }
}

我的启动行动是:

public ActionResult testCreate()
    {
        testCreateModel model = new testCreateModel();
        return View(model);
    }

我的剃刀视图(删除了相关部分)是:

@model Tasks.Models.testCreateModel

@using (Html.BeginForm()) {
<fieldset>
    <legend>testCreateModel</legend>

    <div>
        @Html.LabelFor(model => model.s1)
    </div>
    <div>
        @Html.EditorFor(model => model.s1)
    </div>

    <div>
        Select an item:
    </div>
    <div>
        @Html.DropDownList("dropdownlist",(SelectList)Model.DL)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}

回发行动是:

public ActionResult testCreate(testCreateModel model,FormCollection collection)
    {
        if (ModelState.IsValid)
        {
            Console.WriteLine("SelectedValue: ",model.DL.SelectedValue);
            Console.WriteLine("FormCollection:",collection["dropdownlist"]);
            // update database here...
        }
        return View(model);
    }

在回发后,model.DL.SelectedValue为null. (但是,可以从FormCollection中获取所选项目,但这不是重点). DL对象仍然正确填充,否则,立即窗口输出如下:

model.DL
{System.Web.Mvc.SelectList}
    base {System.Web.Mvc.MultiSelectList}: {System.Web.Mvc.SelectList}
    SelectedValue: null
model.DL.Items
Count = 2
    [0]: {[1,Item 1]}
    [1]: {[2,Item 2]}
model.DL.SelectedValue
null

Q1:如何使用SelectedValue属性?

现在,如果在Razor视图中我将Html SELECT标记的名称更改为DL(即与模型中的属性名称相同):

@Html.DropDownList("DL",(SelectList)Model.DL)

我得到一个例外:

No parameterless constructor defined for this object. 
Stack Trace: 
[MissingMethodException: No parameterless constructor defined for this object.]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly,Boolean skipCheckThis,Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly,Boolean skipVisibilityChecks,Boolean fillCache) +241
System.Activator.CreateInstance(Type type,Boolean nonPublic) +69
System.Web.Mvc.DefaultModelBinder.CreateModel(ControllerContext controllerContext,ModelBindingContext bindingContext,Type modelType) +199
System.Web.Mvc.DefaultModelBinder.BindSimpleModel(ControllerContext controllerContext,ValueProviderResult 
...

Q2:为什么?

谢谢.

解决方法

MVC将仅返回POST中所选选项的值,因此您需要一个属性来包含返回的单个值.

作为一个好建议,尝试通过ViewBag设置SelectLists,这有助于保持viewmodel不受需要填充表单的数据的影响.

所以你的例子可以像这样解决:

public class testCreateModel
{
    public string s1 { get; set; }
    public int SelectedValue { get; set; }
}

并在您的视图中执行此操作:

@Html.DropDownList("SelectedValue",(SelectList)ViewBag.DL)

在您的GET操作中填充ViewBag.DL之前.

至于你的Q2,默认的ModelBinder要求所有要绑定的类型都有一个默认的构造函数(以便ModelBinder可以创建它们)

c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件

c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件

我不确定这是DataGrid控件或一般MultiSelectors的问题,但是当我在网格中选择多行时,会为每一行触发CollectionChanged事件.如果我用鼠标“拖动”,这是有道理的,但如果我“按住Shift键单击”选择多行或只需单击左上角的“全选行”按钮,也会出现这种情况.

我在MultiSelector上看到有Begin / EndUpdateSelectedItems方法以及IsUpdatingSelectedItems属性.不幸的是,我对这个系列/活动的消费者并不知道它的来源.

有没有办法使DataGrid / SelectedItems集合仅在更新完成后发送CollectionChanged通知?

非常感谢你.

编辑:
我发现,对于DataGrid,即使更改大型选择,也不会设置IsUpdatingSelectedItems属性.

编辑:
我发现DataGrid SelectionChanged事件在完全更改后只被正确触发一次.这很不幸,因为这会破坏简单数据绑定的可能性,但如果您可以控制SelectedItems集合的使用者,那么这是一种潜在的解决方法.

解决方法

为了完整起见,我会“回答”我自己的问题.事实证明,WPF控件通常无法处理其CollectionChanged事件处理程序中的单个元素更改 – 这意味着’调用每个项的CollectionChanged’工作流是框架当前形式的正确方法.但是,我个人觉得这是一个糟糕的性能问题.

Doctrine CLI输出doctrine.php的内容

Doctrine CLI输出doctrine.php的内容

我遵循了关于整合学说2和ZF2的在线教程.我能够将数据插入数据库,但每当我运行doctrine CLI它输出:
#!/usr/bin/env sh
SRC_DIR="`pwd`"
cd "`dirname "$0"`"
cd "../doctrine/orm/bin"
BIN_TARGET="`pwd`/doctrine.PHP"
cd "$SRC_DIR"
"$BIN_TARGET" "$@"

这是doctrine.PHP的内容,我用代码frome教程替换了.

将路径复制到doctrine二进制文件(包含“doctrine”,“doctrine.PHP”,“doctrine.bat”……

转到项目的根目录,然后键入:

PHP path_to_doctrine_bin/doctrine.PHP [options]

应该这样做.

doctrine-orm – Doctrine 2:写一个合适的Subselect

doctrine-orm – Doctrine 2:写一个合适的Subselect

我试图在我申请START&之前获得$qb将返回的总记录数.查询$qb的LIMIT属性.我的$qb和$totalQb自己运行得很好,但是当我尝试使用$qb作为子选择时,我得到一个错误抛出:

$qb = $this->entityManager->createqueryBuilder()
        ->select('w,se')
        ->from('Dashboard\Entity\Section','se')
        ->innerJoin('se.word','w')
        ->innerJoin('se.location','l');

    $qb->add('where',$qb->expr()->andx(
        $qb->expr()->eq('l.ignored',$ignored),$qb->expr()->eq('l.id',$params['l_id'])
    ),true);

这条线以上的一切都很好

$totalQb = $this->entityManager->createqueryBuilder()
        ->select('COUNT(x.id)')
        ->from('Dashboard\Entity\Section','x');

上面的$totalQb本身运行良好.但是当我这样做的时候
以下,并尝试使用$qb作为$totalQb的子选择…

$dql = $qb->getDql();
$totalQb->add('where',$totalQb->expr()->exists( $dql ));
$totalsql = $totalQb->getQuery();

$sql = $totalsql->getsql();
$total = $totalsql->getSingleScalarResult();

这是错误的

它指的是SubSelect’exists’语句.但是当我自己运行$dql时
它返回预期的结果

[Syntax Error] line 0,col 69: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM,got ','

在我的场景中进行子选择的正确方法是什么?

UPDATE
有人建议我添加$totalsql-> getDQL();这是该声明的输出:

SELECT COUNT(x.id) FROM Dashboard\Entity\Section x WHERE 
EXISTS(
    SELECT w,se 
    FROM Dashboard\Entity\Section se 
    INNER JOIN se.word w 
    INNER JOIN se.location l 
    AND (l.ignored = 0) 
    AND (l.id = 2) 
    GROUP BY w.id,l.id
)

解决方法

我能够通过更改内部 – >选择仅从一个表拉取来修复上述查询.

关于php – Doctrine select with null的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于asp.net-mvc-3 – 在Post上,下拉列表SelectList.SelectedValue为null、c# – WPF DataGrid(MultiSelector?)多次提升SelectedItems CollectionChanged事件、Doctrine CLI输出doctrine.php的内容、doctrine-orm – Doctrine 2:写一个合适的Subselect等相关内容,可以在本站寻找。

本文标签: