作者: 主人 時間: 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
你可以用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
其實有個filter function 係assign 前已經好好
你將你d 特別logic 收埋晒,雖然好睇,但唔會即時睇到佢究竟做緊乜,影響可讀

