Board logo

標題: PHP有無ORM可以一次過做晒五種唔同的情況 [打印本頁]

作者: 主人    時間: 2014-1-15 01:56     標題: PHP有無ORM可以一次過做晒五種唔同的情況

例如咁
而家有個record {'a','b','c','d', 'e'}

第一個field change value : 'aaa'
第二個field 比個change value empty string : ''
第三個field 唔比野佢, 不作改變 : 'c'
第四個field, 比個null, 改做null : null
第五個field, 比個empty string, 但要識得幫我change to null: null

即係類似我比D咁既野佢
$obj->field1='aaa';
$obj->field2='';

$obj->field4=null;
$obj->field5='';
$obj->update();  or update($obj)

一次update就可以幫我將條RECORD改做
{'aaa', '', 'c', null, null}


唔洗exactly我咁既code, 類似既野就得了
請問PHP有嗎?
作者: louislam    時間: 2014-1-15 03:08

本帖最後由 louislam 於 2014-1-15 03:10 編輯

RedBeanPHP

$post = R::dispense('post');
$post->text = 'Hello World';
R::store($post);
BTW,
5 未必得
作者: 主人    時間: 2014-1-15 10:09

又或者唔洗係一個完整的DB LAYER
可以係用我既操作GEN個sql, 然後背後其實係GEN句SQL掉落去PDO果道行

甚至乎唔洗識得連DB, 純GEN sql出黎既library我自己掉入去PDO都可以
作者: 3kiu    時間: 2014-1-15 14:03

function + forloop 做唔得咩
作者: Jackass_TMxCK    時間: 2014-1-15 15:23

Doctrine

$post = $doctrineManager->getRepository('post')->getByID('001');
$post->setTitle("this is the new title");
$post->setContent("Lorem Ipsum");
$post->setTag(null);

$doctrineManager->flush();
作者: DarkHero    時間: 2014-1-16 01:24

其實你係要改個save 時個logic
orm 應該唔預你會改個input value logic,你不如過左個field setter 再俾orm 去做野啦
作者: 主人    時間: 2014-1-16 11:05

本帖最後由 主人 於 2014-1-16 11:06 編輯
其實你係要改個save 時個logic
orm 應該唔預你會改個input value logic,你不如過左個field setter 再俾orm ...
DarkHero 發表於 2014-1-16 01:24



唔係好明
有無example code可以睇下??


我講講而家個情況係點
其實係因為DB有D field係unique value, 但有D 唔係
所以, 如果user將個field改做empty string, 咁unique就會有問題
所以, 最理想係希望做到類似咁, 就可以識分係null定 ""
$obj->fielda=$_POST['fieldA']; //unique
$obj->fieldb=$_POST['fieldB'];
$orm->save($obj);

又或者類似咁都好
$obj->fielda=array($_POST['fieldA'], EMPTY_TO_NULL); //unique
$obj->fieldb=array($_POST['fieldB'], EMPTY_TO_EMPTY);
$orm->save($obj);



但如果你話要整D咁既logic出黎, 我就覺得D code唔夠elegant

if($_POST['fieldA']=='')
{
        $obj->fielda=null; //unique
}
else
{
        $obj->fielda=$_POST['fieldA']; //unique
}

if($_POST['fieldB']=='')
{
        $obj->fieldb=$_POST['fieldB'];
}
else
{
        $obj->fieldb=$_POST['fieldB'];
}

$orm->save($obj);
作者: DarkHero    時間: 2014-1-16 23:40

唔係好明
有無example code可以睇下??


我講講而家個情況係點
其實係因為DB有D field係unique value,  ...
主人 發表於 2014-1-16 11:05


你可以用inline一句做
$obj->fielda = $_POST['fieldA']=='' ?  null : $_POST['fieldA'];

或者
$obj->fielda = emptyOrNull($_POST['fieldA']);

你個fieldB完全唔知做乜,兩個condition 做同一樣野
作者: 主人    時間: 2014-1-17 00:09

你可以用inline一句做
$obj->fielda = $_POST['fieldA']=='' ?  null : $_POST['fieldA'];

或者
$obj->f ...
DarkHero 發表於 2014-1-16 23:40



個B field係為左跨張少少比你睇, 所以本來唔洗有個IF, 都打埋出黎

同埋我覺得唔係純綷將D CODE變成inline就
相信一定有更好的pattern/design
作者: DarkHero    時間: 2014-1-17 23:15

個B field係為左跨張少少比你睇, 所以本來唔洗有個IF, 都打埋出黎

同埋我覺得唔係純綷將D CODE變成inli ...
主人 發表於 2014-1-17 00:09


其實有個filter function 係assign 前已經好好
你將你d 特別logic 收埋晒,雖然好睇,但唔會即時睇到佢究竟做緊乜,影響可讀





歡迎光臨 電腦領域 HKEPC Hardware (https://h0.hkepc.com/forum/) Powered by Discuz! 7.2