トップページphp
1001コメント305KB

【PHP】フレームワーク CakePHP 8ホール目【1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/03/18(木) 10:00:59ID:6+kHM8kH
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※sage推奨
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0014nobodyさん2010/03/19(金) 19:18:17ID:qSSo5h5k
controller

// チェックが入った物だけを取得し、配列に格納
$metroHash = array();
foreach($this->data['Page']['metro'] as $key => $value){
if($value == 1){
$metroHash[] = 'metro Like ' . "%".$key."% ";
}
}

// 配列を文字列に変換
$metroHash = implode(' or ',$metroHash);

$consultantHashModelArray = $this->Consultant->query('SELECT * FROM `consultants` WHERE ' .$metroHash);
ここでこのSQL文を使えばできるのですが、今回やりたいのは下のpaginatorででして
どのようにすれば上のSQL文と同じ処理をしてくれるかがわかりませんので教えて頂けないでしょうか?


$conditionsHash = array();
$conditionsHash['metoro LIKE ?'] = なんたら?
$this->paginate = array('Consultant' => array('conditions' => $conditionsHash,
'limit' => 10,
'order' => array('consultant_id' => 'DESC'),
'page' => 1));
0015nobodyさん2010/03/19(金) 19:27:50ID:???
すみませんCakeのバージョンは1.3です。
0016nobodyさん2010/03/19(金) 20:20:26ID:???
PEARなどを使うとき、Cakeのコアクラスと名前が衝突してしまい、うまく動作しないことがあるのですが、
みなさんはどのように解決されていますか?

http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1153&forum=3&post_id=2359

こちらではPEAR側のソースを書き換える方法が提示されていますが、
できればソースの書き換えはしたくないです。

そもそも、コアクラスとか定数にprefixがついてないのっていろいろと問題あるとおもうのですが・・・どうなんでしょう。
0017nobodyさん2010/03/19(金) 23:42:18ID:???
>>13
モデル名からなにやりたいのか想像つきにくいよ。
たぶんconsultants_metorosテーブルを作ってHABTMにするのが簡単なんじゃないかなと思うけど。
0018nobodyさん2010/03/20(土) 16:12:27ID:???
javascriptでもMVC
ttp://code.google.com/p/jsigniter/
0019nobodyさん2010/03/20(土) 19:57:19ID:???
cakephp1.2.6+xamppで、http://3d.rokujyou.com/cake/index.htmlを動かそうとしているのですが、

Missing Controller
Error: UrllistController could not be found.
Error: Create the class UrllistController below in file: app\controllers\urllist_controller.php

というエラーが出てしまいます。
urllists_controller.phpをurllist_controller.phpに変更しても同じでした。
何か他に設定すべきことがあるのでしょうか?
0020nobodyさん2010/03/20(土) 20:31:58ID:???
>>19
Class名は変えたの?
0021nobodyさん2010/03/20(土) 22:31:07ID:???
初歩的な質問で申し訳ございません
チュートリアルで分からない部分があります。

コントローラとビューについて
ビューの画面に遷移しようとするとコントローラのメソッドが呼び出され
その結果、戻り値を反映したビューがブラウザに表示されると解釈していました。

しかし、editファンクション内の処理で行われるPostデータをsaveする命令は
ビューが表示された後にPost送信するときに実行されるように見えます。
この処理の流れがよく分かりません。

恐縮ですが、どなたか分かる方がいればご教授お願いします。
0022nobodyさん2010/03/20(土) 22:50:56ID:???
>>21
まず基本から。
ひとつのリクエストは、Controllerが(必要に応じてmodelとやりとりしながら)処理し、最終的にviewを表示して終了する

で、addやeditアクションについては、[1]フォームを表示する[2]postデータを保存する、のふたつのリクエストを同じアクションで行っているにすぎない
postされたデータがあるリクエストであれば[2]を、なければ[1]を行っている
それぞれ別のリクエスト
0023nobodyさん2010/03/20(土) 23:02:23ID:???
>>20
動きました、ありがとうございます。
0024nobodyさん2010/03/20(土) 23:13:50ID:???
>>22
レスありがとうございます。

empty($this->data) ならば、フォームが表示される処理のみされる
(editの場合はreadされた値が代入され表示される)
ということですね。

丁寧に説明していただき、とても助かりました。
0025nobodyさん2010/03/20(土) 23:42:34ID:???
公式以外で入門サイトありませんか?
0026nobodyさん2010/03/21(日) 00:20:20ID:???
>>25
googleってサイトが便利らしいぞ
0027nobodyさん2010/03/21(日) 00:53:04ID:???
>25
素直に本買った方が早いと思う
0028nobodyさん2010/03/21(日) 10:11:29ID:???
>>27
本買うことにします

>>26
googleで検索してもたいして有益なサイトはありませんね、国内サイトしか見てませんけど
0029nobodyさん2010/03/21(日) 11:34:14ID:???
えっ!?
0030nobodyさん2010/03/21(日) 11:52:05ID:???
初心者向けの開発会の需要はあるかねえ?
前に誰かがやってた気がするんだけど
0031nobodyさん2010/03/21(日) 11:52:20ID:???
25=28=30
やっぱりcakephpは難しいのでCodeIgniterに移住します
公式のユーザーガイドが分かりやすくてフレームワーク初心者のぼくでもなんなくわかりやすいので
ありがとうございました
0032nobodyさん2010/03/21(日) 12:04:06ID:???
>>31
cakeもそんなに難しくはないので、また気が向いたら戻ってきてね
0033nobodyさん2010/03/21(日) 13:54:33ID:???
>>30
プログラマの将来のためにも
初心者向けの入り口は作ってあげたほうが良いよ。
まぁ、ほとんど挫折するだろうけど
0034nobodyさん2010/03/21(日) 14:05:16ID:???
入門はそんなに難しくないと思うけどな
カンタンでわりと実践的なチュートリアルを増やしたらいいかも
0035nobodyさん2010/03/21(日) 15:09:25ID:???
初心者向きのサイトはけっこうあると思うけどなぁ。
むしろ本だとbake中心だったりして実用的じゃない
0036nobodyさん2010/03/21(日) 16:25:52ID:???
常識的に考えてDBっていくつまで hasOne,hasMany,belongsTo していいものなの?
あんまりやりすぎても負荷がかかるんだろうけど。
4,5個つなげる程度なら問題ないのかな。
0037nobodyさん2010/03/21(日) 17:39:14ID:???
みんな開発環境って何使ってるの?
0038nobodyさん2010/03/21(日) 17:40:46ID:???
秀丸
0039nobodyさん2010/03/21(日) 17:55:22ID:???
>>36
実行速度と実行回数によりけりかな

>>37
VirtualBox + CentOS + vim
0040nobodyさん2010/03/21(日) 17:56:15ID:???
colinux+うぶんちゅ+秀丸
0041nobodyさん2010/03/21(日) 18:41:24ID:???
待ってろcakephp
俺は貴様を倒しに必ず戻ってくる
0042nobodyさん2010/03/21(日) 19:08:58ID:???
>>34
symfonyのQ&Aサイトのチュートリアルがあったと思うんだけど、あの程度のボリュームのやつがcakeであると良いと思う
暇と技術があれば俺が作りたいけど、どっちもあまりない
0043nobodyさん2010/03/21(日) 19:19:40ID:???
>>36
例えば普通のブログみたいなもんでも
記事にコメント、ユーザー、タグ、カテゴリー、トラックバック・・・って
いっぱいくっついてくるわけだしいいんじゃないの?
まあフィールドを選んだりcontainで必要なものだけ絞ったりはするけど。
0044nobodyさん2010/03/21(日) 21:40:38ID:???
SQLレベルに限って言えば、JOINの数なんてそんなに問題にならないと思うけどな
業務系システムだと3桁とか珍しくないし
0045nobodyさん2010/03/22(月) 07:12:01ID:???
3桁は珍しいんじゃないか?w
まぁなんにしても適切な結合で適切にインデックスとか
貼ってあれば問題なかろう
0046nobodyさん2010/03/23(火) 01:07:32ID:???
CakePHPの開発にトライしてみました。PHP自体、かなり初心者。

相当昔、仕事でJavaのStrutsというMVCフレームワークで
ガシガシ開発していたので、何とかなるだろうと思ったら、
意外につまづきました。主にひっかかったのは以下3点。

1点目:MVCのContollerでの設定方法が良く分からない
2点目:Modelの命名とテーブルの命名の関係性にはまる
3点目:ヘッダーのフッターの余分な表示どうにかなんない?

全て解決しましたが、



0047nobodyさん2010/03/23(火) 01:08:59ID:???
46です。間違ってカキコしてしまいました。

慣れれば快適なフレームワークですが、
ちょっと入り口は敷居が高い気がしました。

>>34 さんの「カンタンでわりと実践的なチュートリアルを増やしたらいいかも」
に同意です。
0048nobodyさん2010/03/23(火) 07:11:46ID:3JpwvDQY
sessionが使えない環境でsessionぽい使い道として、
Configure::read & writeを利用しようと思うのですが、
セキュリティ上まずい点はありますか?
0049nobodyさん2010/03/23(火) 07:48:44ID:fJcglhKE
よくわからんが、それってリクエスト毎のパラメータを引き継げるの?
0050482010/03/23(火) 08:29:31ID:???
GETでデータが来たら、
Configure::write('aaa', $_GET['nantoka']);
みたいにすれば、いつでもConfigure::read('aaa')で
内容を取り出せます。

Cookieを切っても保存されているのだけど
ちょっとどういう風に動いてる機能なのか、よくわからなくて。
0051nobodyさん2010/03/23(火) 09:10:10ID:???
てかそれ
あきらかにセッションごとじゃなくて
全員でひとつの設定になるよね
0052nobodyさん2010/03/23(火) 09:11:17ID:???
>>48
>>50のような使い方でセキュリティ上まずい点なんかないよ
0053nobodyさん2010/03/23(火) 09:55:42ID:???
CakePHPのドキュメントってなんであんなにわかりずらいの
CodeIgniterみたいな丁寧なドキュメント級のサイト作ってくれたらアフィ毎日踏んであげてもいいですよ
ttp://codeigniter.jp/user_guide_ja/toc.html
0054nobodyさん2010/03/23(火) 10:14:41ID:???
>>39>>43
>>44>>55

ありがとう!
以前レンタルサーバーで mysql too many connections ってエラーが出たのでSQL恐怖症で。
このエラーって一般的なレンタルサーバーだとめったに出ないものなのかな。

cakephp使ってないときだったので、sqlの組み方がおかしかったのかもしれなけど。
0055nobodyさん2010/03/23(火) 10:31:46ID:CwgG/vKY
ちょっと悩んでいます。
以下のように[ ] で配列を作りたい場合、cakeではどのように入力したらよいのでしょうか?

<input type="text" name="name[]" />


echo $form->input('name[]');
このようにやっても上手くいかず。。
0056nobodyさん2010/03/23(火) 10:45:51ID:???
>>55
sageてね

http://book.cakephp.org/ja/view/189/Automagic-Form-Elements
第2引数で指定してください
0057nobodyさん2010/03/23(火) 13:01:17ID:???
>>56
たしか第2引数で
name => 'hoge[]'

みたいに指定すると、Securityコンポーネントで弾かれるはず・・・
解決策はしらん。
0058nobodyさん2010/03/23(火) 13:24:29ID:???
>>54
同居人が多いレンタルサーバーだとどこでも接続数が絞られてるからエラー出るよ
チューニングするとか、キャッシュするとかしかない
0059nobodyさん2010/03/23(火) 17:42:20ID:???
>>58
ありがとうございます。
mysqlとサーバーはほとんど知識無いんですけど、専用サーバーなら出ませんかね?
次エラーがさくらマネージドにしようか考え中です。
0060482010/03/23(火) 22:07:17ID:???
>>52
なるほど

>>51
とりあえず、テストしたら全体でひとつの設定にはならないようです
なので、この方法を使ってみます。
0061552010/03/24(水) 08:07:39ID:???
ageちゃって申し訳ありません。

>>56
>>57

echo $form->input('Modelname.0.fieldname');
とすると解決しました!

ありがとうございます!
0062nobodyさん2010/03/24(水) 10:07:09ID:???
誰か初心者講座サイト作ってください
0063nobodyさん2010/03/24(水) 10:08:18ID:???
>>62
本一冊くらい買えばいいよ
0064nobodyさん2010/03/24(水) 10:39:46ID:???
cakephp1.3を使用しています
Paginatorでチェックボックス引継ぎって可能ですか?
10件ずつ表示したとして、次の10件に行っても以前の10件でチェック
していたチェックボックスは維持させていたいのですが。
可能でしたらやり方教えてくれませんか
0065nobodyさん2010/03/24(水) 10:41:16ID:???
>>64
cookieを使えばオケ
0066nobodyさん2010/03/24(水) 16:45:26ID:???
>>59
専用サーバーだって、mysqlの設定とアクセスの数によっては出る
その辺はcakephpじゃなくてmysqlの話になるのでmysqlスレいって聞いた方がいいよ
0067nobodyさん2010/03/24(水) 17:55:12ID:???
>>64
それは、Cakeに限らず普通にセッションで持たせれば良いんじゃないのかな?
0068nobodyさん2010/03/24(水) 23:38:26ID:???
cakephpで作成日時はcreatedですが、作成した人のIPや更新した人のhost、
などどう定義してますでしょうか?

作成した人のIP:created_ip
作成した人のHOST:created_host
更新した人のIP:updated_ip
更新した人のIP:updated_host

最後のdがdateのdであれば、以下のように定義?

作成した人のIP:create_ip
作成した人のHOST:create_host
更新した人のIP:update_ip
更新した人のIP:update_host

守ったほうがよい細かいDBの命令規則のページなどありましたら教えてほしいです。
0069nobodyさん2010/03/25(木) 00:09:57ID:???
>>68
>最後のdがdateのdであれば、以下のように定義?
-edは過去分詞形なんだが…。

それはさておき、作成した人、更新した人だったら
creator_ip、creator_host、updater_ip、updater_host
でいいんじゃないかと思う。

個人的にupdaterよりeditorのほうがしっくりくるんだけども。
0070nobodyさん2010/03/25(木) 00:36:15ID:???
>>68
マニュアルのモデルのところに出てる以外は別に決まってないので好きなようにどうぞ。

>>69 のように英語で考えてわかりやすいように・・・というか、
自分でコントローラーとかビューのコード書くときに「えっとフィールド名なんだっけ??」って
いちいち探さなくて済むように作っておけばいいよ。
0071nobodyさん2010/03/25(木) 09:17:02ID:???
http://www.imagecheese.com/gallery/lil.jpg

上記のページはユーザー情報のedit画面です。
アドレスに指定された$idを元に、データベースから情報を抜き出しています。(例では$Idが43)
この$idの部分を $hashで表示する方法はないでしょうか?

http://localhost/scrap/users/edit/43 (これが今のやり方)
http://localhost/scrap/users/edit/7c02d52cc1be46217793f002640553d7 (これで元データを拾いたい)


下記が現在のスクリプトです。

function edit($id = null) {
if (!empty($this->data)) {
if($this->User->saveall($this->data, array('validate'=>'first'))){
$this->Session->setFlash(__('The Data has been saved.', true));
}
}
if (empty($this->data)) {
$this->data = $this->User->read(null, $id);
$this->set('data', $this->data);
}
}


単純に$idを$hashにすれば上手くいくかなと思いましたが、上手くいかず。。お助けくださいませ。
0072nobodyさん2010/03/25(木) 09:23:01ID:???
>>71
read()じゃなくてfind()を使いましょう
マニュアル読んで、editアクションで何が行なわれているかを理解するところから始めると良いよ
0073712010/03/25(木) 09:32:04ID:???
>>72 
ありがとうございます!

スクリプトを以下のように書くとこうなりました。
http://www.imagecheese.com/gallery/ouo.jpg

function edit($id = null) {
if (!empty($this->data)) {
if($this->User->saveall($this->data, array('validate'=>'first'))){
$this->Session->setFlash(__('The Data has been saved.', true));
}
}
if (empty($this->data)) {
$conditions = array("hash" => $id);
$this->data = $this->User->findAll($conditions);
$this->set('data', $this->data);
}
}


データは取得できたけど、フォームに自動的に挿入されない。。
0074712010/03/25(木) 09:34:29ID:???
ちなみに Viewの部分はこちらです。

<?php echo $form->create('User',array("action"=>"show"));?>
<fieldset>
<legend><?php __('Edit Data');?></legend>
<?php
echo $form->input('address');
echo $form->input('Keyword.0.name');
echo $form->input('Keyword.1.name');
echo $form->input('Keyword.2.name');
?>
</fieldset>
<?php echo $form->end('Submit');?>
0075712010/03/25(木) 09:40:46ID:???
すいません!
findall じゃなくて findで指定したら上手くいきました!

なんて馬鹿なんだ。。
0076722010/03/25(木) 09:43:57ID:???
>>73-75
全部聞こうとしないで、試行錯誤してごらん
いつまでも使いこなせないよ
0077712010/03/25(木) 09:52:43ID:???
了解しました。
すぐに聞かずに自分で悩む時間を大切にします!

この試行錯誤する過程が一番身になるんですよね。。
0078642010/03/25(木) 17:45:28ID:???
cookieにsessionですか
すみませんがPaginetorでの具体的なやり方教えていただけませんか?
0079nobodyさん2010/03/25(木) 18:04:30ID:???
>>78
自分で調べろ
0080nobodyさん2010/03/25(木) 22:54:10ID:???
ヒントだけあげるとpaginator使おうが使わなかろうがフォームに値をセットするには
どうすればいいか考えればいい。
0081nobodyさん2010/03/25(木) 23:49:51ID:???
甘やかしすぎるのはよくないんじゃねーの。
ただ「教えてくれ」と言ってる奴ってダメだよ。
「ここまで調べたけど、ここが分からない」というのが本来の聞き方でしょ。
ダメ人間に餌を与えすぎると無意味に肥え太るぞ。
0082nobodyさん2010/03/26(金) 07:28:24ID:???
>>78
とりあえず、それぞれの値を保存、取得するのに
いくつかのやり方があるということ
どういうサイトを作っているのか、晒してくれれば
見にいくよ
0083642010/03/26(金) 09:23:56ID:???
POSTで渡すならすぐにわかるのですが
ちなみにチェックボックスは
<?php e($form->checkbox('Model.name.'.$id))?>
という形でこれをforeachで繰り返し出してます。
POSTで来るなら
foreach($this->data['Model']['name'] as $key => $value){
if($value == 1){

}
見たいな感じの処理でいいと思うのですが

もう少しpaginatorを勉強します
すみませんでした
0084nobodyさん2010/03/26(金) 11:40:01ID:???
>>83
paginatorというブラックボックスを前にして、たぶん本質とは全然関係なさそうなところで
引っかかってるだろうから俺は >>80 を書いたんだけども、
paginatorは一旦頭から切り離す。どのページに推移しようがやることは同じだって。
0085nobodyさん2010/03/26(金) 11:50:37ID:???
>>83
javascript使ったらどうかな?
0086642010/03/26(金) 13:12:20ID:???
すみませんやりたいことを初めから準に書きますね。

まず、検索フォーム(page_contololler)から『アイス』と入力して検索
データベースから『アイス』を含むユーザーを取ってきます。

ここは
// 検索条件
if (env('REQUEST_METHOD') == 'POST' ) {
$this->Session->write('pageHash', $this->data['Page']);
$conditionsHash = $this->getWhereParameters($this->data['Page']);
} elseif (isset($this->passedArgs['Page'])) {
$this->data['Page'] = $this->Session->read('pageHash');
$conditionsHash = $this->getWhereParameters($this->data['Page']);
} else {
$this->Session->delete('pageHash');
$conditionsHash = array();
}
//検索条件

function getWhereParameters($pageHash) {

$conditionsHash = array();

$conditionsHash['name' Like ?] = $pageHash['page']['name'];
}

$this->paginate = array('Model' => array('conditions' => $conditionsHash,
'limit' => 10
'page' => 1));

こういった感じで$conditionsHashをsessionで渡して
paginatorの次へを押した場合検索条件を引き継ぐようにしています。
0087642010/03/26(金) 13:16:17ID:???
ここでリスト一覧にさっきのチェックボック(チェックのON,OFF可能)を持ったユーザが一人一人
出てくるわけなのですが。
paginatorの 次へ>> や << 前へを押した場合に
自分でチェックをつけたチェックボックスを維持したままページを移動したいのです。

それで最後にチェックの入ったユーザだけを取り出すというシステムです。

やはり表示上は裏で全部出してjavascriptでの制御が簡単なんですかね
0088nobodyさん2010/03/26(金) 13:29:56ID:???
>>87
次へ>>をsubmitにすれば、controllerでsessionに保存したりできるよね
しかし、どちらにせよjavascriptは使うのではあるまいか、と思います
0089nobodyさん2010/03/26(金) 13:31:55ID:???
面倒だから検索条件をserializeしてセッションでわたせば。
0090nobodyさん2010/03/26(金) 13:38:22ID:???
ページングしてるページ毎のチェックボックスの状態を記憶せにゃらならんのでしょ。
自分だったら

1)チェックボックスにonclickイベントつけて、ユーザーIDとチェック状態を非同期送信
2)1)をサーバー側のアクションで受けて、DBなりセッションなりに溜めとく
3)あとは溜めたステータス情報を持ち回って、煮るなり焼くなりお好みひゃっほー

あ、昼休みおわた
0091nobodyさん2010/03/26(金) 14:55:35ID:???
SQLのログでさ、
SQLへの負荷 はどれをみればいいのかな。
Nr Query Error Affected Num. rows Took (ms)

おしえてちょんまげ。
0092nobodyさん2010/03/26(金) 15:09:30ID:???
>>91
そのなかなら Took (ms)
ms = micro seconds
0093nobodyさん2010/03/26(金) 15:45:33ID:???
>>92
ご親切にありがとう!
ちなみにどれくらいまでが問題無い範囲なんだろ。

合計が 100越えたら重すぎるとか、300までなら余裕とか。
もちろんアクセス数などにもよるだろうけど。
0094642010/03/26(金) 15:48:19ID:???
いろいろな意見ありがとうございます。
今後じっくり考えてやってみます。
ただ、今回は時間があまりないのと自分自身のスキルがたりないのもあってで
ttp://css-eblog.com/javascript/javascriptpaging.html
を使ってすることにしました。

ありがとうございました。
0095nobodyさん2010/03/26(金) 16:19:18ID:???
一画面に全部のデータを読み込むのかな
ありっちゃありだけど
0096nobodyさん2010/03/26(金) 19:09:52ID:???
yahooや楽天のように、ログインしているとユーザ専用のリンクが見えて、非ログイン時には
その旨をメッセージで表示するにはどうすればよいのでしょう。
(viewで表示分岐するのは分かるんですが、その前のAuthでどうするか)

非ログインユーザはゲストとして自動的に認証させる?という方法しか
思いつかないのですが、スマートな方法はありませんか。
0097nobodyさん2010/03/26(金) 19:14:59ID:???
??
現状でログインしているかどうかの判断で振り分ければいいのでは?
0098nobodyさん2010/03/27(土) 11:07:00ID:???
>>94
全データが多くなければそれでもいいと思う
1.3は触ってないからわからないけど
1.2なら、paginatorヘルパーで出力するときに引数でFORMのパラメータ渡せば
検索条件付のURLによるページングも作れる
0099nobodyさん2010/03/27(土) 13:02:02ID:???
>>96
Auth使ってるなら
$this->Auth->user()
で中身確認できたと思うけど
issetとかで判断すればいいんじゃない?
controllerね
0100nobodyさん2010/03/27(土) 18:21:26ID:???
最近マニュアル読まないで質問する人増えたなあ
基本的なことは一通り書いてあるけどねえ
0101nobodyさん2010/03/27(土) 18:25:10ID:???
自由に質問させてあげればいいんじゃないかな
答えるのは俺らの自由なんだし
0102nobodyさん2010/03/27(土) 19:04:05ID:???
ルビ厨にCakeは欠陥品とか言われてんぞw
http://pc11.2ch.net/test/read.cgi/php/1217883614/447
0103nobodyさん2010/03/27(土) 20:46:53ID:???
別に気にならない
0104nobodyさん2010/03/27(土) 21:30:03ID:???
そもそもrails自体最初はPHPで実装しようと思って失敗してRubyに切り替えられたものなので、
railsユーザーから見たら(Cake)PHPがNGなのは当然と言えば当然のような
0105nobodyさん2010/03/27(土) 23:09:29ID:???
欠陥品じゃない言語・FWなんて歴史上存在したことがない
0106nobodyさん2010/03/28(日) 15:54:08ID:???
んだね。何使ってたって上手くいかないときには「〇〇はクソ!」とかって吠えたくなるときあるもんね。
0107nobodyさん2010/03/28(日) 17:07:23ID:???
それ、むしろカチンときてるっぽぃ
0108nobodyさん2010/03/28(日) 17:17:43ID:???
CakePHPの開発者が離脱したらしいけど
CakePHPに影響あるかね?
0109nobodyさん2010/03/29(月) 09:56:07ID:???
CakePHP 1.3.0-RC3 unleashed
http://bakery.cakephp.org/articles/view/cakephp-1-3-0-rc3-unleashed
0110nobodyさん2010/03/29(月) 09:56:40ID:???
これはstableでるのも近いかも
0111nobodyさん2010/03/29(月) 10:33:52ID:???
cakephpは delete や save などの機能を使う時にデータテーブルのidを参照するようにみえます。
ということは、下記のようにidなしのkeywordsテーブルを作成するのはNGなのでしょうか?

usersテーブル
id, address,

keywords テーブル
name, user_id (二つ合わせてプライマリーキー)

0112nobodyさん2010/03/29(月) 10:39:50ID:???
>>111
複合プライマリーキーはNG
idを別途用意しておくべし
0113nobodyさん2010/03/29(月) 10:53:18ID:???
>>112

やはり。。いろいろやっても上手く動かなくて悩んでました。
ありがとうございます!

実はkeywordsテーブルで name と user_id が重複しないようにしたかったのです。

ローソン(name), 13(user_id)
ローソン(name), 13(user_id)
このように、データが重複しないように。

調べたところ、Cakephpにはそういったデータ用の関数はなさそうです。

直に MySQLの replace を書き込むのが吉でしょうか?
0114nobodyさん2010/03/29(月) 11:08:41ID:???
>>113
1.3ならvirtualFieldのisUniqueでいけそうな気がするが
1.2なら独自バリデートかな
■ このスレッドは過去ログ倉庫に格納されています