symfony PHPフレームワークpart2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/03/17(水) 00:34:44ID:???フランチョスとsymfony
http://pc11.2ch.net/test/read.cgi/php/1201177567/
1.x系公式
http://www.symfony-project.org/
symfony reloaded(2.0) まだプレビュー版
http://symfony-reloaded.org/
0168nobodyさん
2010/09/15(水) 16:26:35ID:???0170nobodyさん
2010/09/15(水) 21:29:28ID:???んで将来的には自分でフレームワークを作りたい。
0171nobodyさん
2010/09/15(水) 21:31:04ID:???もうちょっと全貌というか概略から勉強したいんだよね。
0172nobodyさん
2010/09/16(木) 00:39:38ID:???0173nobodyさん
2010/09/16(木) 02:56:34ID:???ただ実戦投入してはいけないw
0174nobodyさん
2010/09/16(木) 07:09:09ID:???0175nobodyさん
2010/09/16(木) 10:49:36ID:???PHPのプログラム的セキュリティもFWの流儀に従ってれば、
たいていは問題ない。
それよりFW使って、みんなを楽しませる、おもしろいサービスつくろうぜ!
0176nobodyさん
2010/09/16(木) 14:57:27ID:???0177nobodyさん
2010/09/16(木) 21:53:53ID:???人がやれることは限られてるのだ。時間もね。
0178nobodyさん
2010/09/17(金) 03:31:33ID:???0179nobodyさん
2010/09/17(金) 21:38:18ID:???0180nobodyさん
2010/09/17(金) 22:53:40ID:???0181nobodyさん
2010/09/18(土) 19:35:38ID:???freezeしようとしたら「Task "freeze" is not defined.」になったので、tar.gzにしてFTPで送って解凍しました。
Autoloadが、sfDoctrineが見つからないって言ったから、自分でpluginsに
SVNでVer1.1とってきたんだけど
>Fatal error: Call to undefined method RecordForm::setupInheritance() in /virtual/myname/myproject/lib/form/doctrine/base/BaseRecordForm.class.php on line 47
というエラーがでます。
Ver1.3-2.0も試したけどエラーでした。
どうしたらいいでしょうか。。。
0182181
2010/09/18(土) 19:55:07ID:???>Fatal error: Class 'sfValidatorSfCryptoCaptcha' not found
Autoloaderがうまく機能してないんかな。。
0183181
2010/09/18(土) 20:33:10ID:???plugin下を手動で再配置して直りました。
でもまた新しいエラーが。
>500 | Internal Server Error | sfConfigurationException
>The route "captcha_refresh" does not exist.
ローカルでは動くのに、なんでこんなにエラー出るんだろ。。。
0184181
2010/09/18(土) 21:54:41ID:???今度はCaptchaImageがxになるぜ!まったくなんてヤローだ。
0185nobodyさん
2010/09/26(日) 21:30:28ID:???edit_mode オプションは %%is_activated%% %%JobeetCategory%% -
%%company%% (%%email%%) is looking for a %%=position%% (%%location%%)
max_per_page: 10 sort: [expires_at, desc] batch_actions: _delete:
extend: object_actions: extend: _edit: _delete: ~ actions:
deleteNeverActivated: { label: Delete never activated jobs }
table_method: retrieveBackendJobList filter: display: [category_id,
company, position, description, is_activated, is_public, email,
expires_at] form: class: BackendJobeetJobForm display: Content:
[category_id, type, company, logo, url, position, location,
description, how_to_apply, is_public, email] Admin: [_generated_token,
is_activated, expires_at] edit: title: Editing Job "%%company%% is
looking for a %%position%%" new: title: Job Creation
0186nobodyさん
2010/09/26(日) 21:44:33ID:???前半の説明9割飛ばしてるし、後半も足りねー。
どーりで何度読んでも意味が分からないわけだ。
日本語訳アリは『○』
○ Backend Creation
× Backend Modules
× Backend Look and Feel
× The symfony Cache
× Backend Configuration
× Title Configuration
× Fields Configuration
○ List View Configuration
○ Form Views Configuration
× Filters Configuration
× Actions Customization
× Templates Customization
× Final Configuration
○ Final Thoughts
0187nobodyさん
2010/09/26(日) 21:55:28ID:???0188nobodyさん
2010/09/28(火) 01:01:17ID:???>Fatal error: Call to a member function getId() on a non-object in
>showSuccess.php on line 5
List,New,Editは問題なし。Showのみエラー。なんででしょう??
0189nobodyさん
2010/09/28(火) 16:06:48ID:???0190nobodyさん
2010/09/28(火) 17:21:48ID:???ccはキャッシュが残ることあるんで、
cacheディレクトリ以下全削除もしました。
0191nobodyさん
2010/09/28(火) 17:27:27ID:???テンプレートが更新されないのがイヤなので、
module以下のactionとtemplateを削除して
再度モジュール生成、なんてことをしたのがマズかったのかな。。。
0192nobodyさん
2010/09/28(火) 18:41:32ID:???action内では、getId()に成功して正しい値でした。
> public function executeShow(sfWebRequest $request)
> {
> $this->response = Doctrine_Core::getTable('response')->find(array($request->getParameter('id')));
> $this->forward404Unless($this->response);
># file_put_contents("d:\\debug.txt",$this->response->getId());
> }
しかし、テンプレート内でisset($response)するとfalseになります。
> Notice: Undefined variable: response in showSuccess.php on line 8
>
> Fatal error: Call to a member function getId() on a non-object in showSuccess.php on line 8
0193nobodyさん
2010/09/28(火) 18:53:05ID:???スキーマの問題でしょうか。。。
>php symfony doctrine:generate-module --with-show
> --non-verbose-templates frontend response2 response
0194nobodyさん
2010/09/28(火) 19:46:03ID:???$this->response = Doctrine_Core::getTable('response')->find(array($request->getParameter('id')));
↓
$this->resObj = Doctrine_Core::getTable('response')->find(array($request->getParameter('id')));
とか。
テンプレート側も修正が必要になるけど置換一発で行けるでしょ
0195194
2010/09/28(火) 19:48:24ID:???action,componentのクラス内で$this->requestと$this->responseはsymfonyが使う既定のプロパティだから、
$this->requestと$this->responseは設定してもビューには渡されないんだ。
参考までに
http://trac.symfony-project.org/browser/branches/1.4/lib/action/sfComponent.class.php
0196nobodyさん
2010/09/28(火) 21:50:40ID:???感謝です!!
0197nobodyさん
2010/09/29(水) 00:57:50ID:???sfWidgetFormDoctrineChoiceの中もちょっと見たのですが分かりませんでした。
実運用の時には、「リストの2番目に新しいカテゴリ名を追加したい」なんていう
変更はよくあると思うので、何かやり方はあると思うんですが。。。
0198nobodyさん
2010/10/03(日) 23:41:03ID:???スキーマを作ってDBまで作成するのは大げさだと思うので
BaseFormDoctrineを派生させて、自前でフォームを作ろうとしたのですが
アクションでnew MyformForm()すると失敗します。
>Fatal error: Class 'Myform' not found in
>C:\MyProject\lib\vender\symfony\lib\plugins\sfDoctrinePlugin\lib\form\sfFormDoctrine.class.php on line 39
こうゆうやり方はNGなんでしょうか?
0199198
2010/10/04(月) 01:35:50ID:???ところで、sfValidatorEmailが、アドレスに「"」「,」「:」「\n」なんかがあっても
許容しちゃうんだけど、みんなこのまま使ってるの??
俺は怖いから書き換えたけどね。
0200198
2010/10/04(月) 16:19:34ID:???ひょっとして、モデルも作らないとダメってことですか?
0201nobodyさん
2010/10/04(月) 17:08:59ID:???0202nobodyさん
2010/10/04(月) 17:35:35ID:???0203nobodyさん
2010/10/05(火) 18:10:52ID:???普通は国際化して、「入力が正しくありません」などに変えると思います。
新規登録画面でパスワードを2回入力させて、そのチェックに sfValidatorSchemaCompare を使っているので、
失敗時には「入力が正しくありません」じゃなくて「パスワードが一致しません」にしたいんです。
なんとかエラーメッセージを区別できないもんでしょうか?
ソースを見た感じ、"throw_global_error"オプションを設定して、自分でcatchしてハンドリングすればできそうな気もしているのですが
どこでどうハンドリングすればいいのか分かりません。
sfValidatorSchemaCompare.class.phpの117行目の「$error = new sfValidatorError($this, 'invalid', 」の
'invalid'を書き換えればひとまず対処できますが、sfValidatorSchemaCompare を他の用途で使うときに
適切でないエラーメッセージになってしまうので、ソースを直接いじるのは遠慮したいです。
どのように対処すればよいでしょうか?
0204203
2010/10/05(火) 18:40:45ID:???長々と失礼しました。
0205nobodyさん
2010/10/06(水) 15:21:59ID:???0206nobodyさん
2010/10/07(木) 10:02:16ID:???http://netbeans.org/features/php/index_ja.html
http://netbeans.org/images_www/v6/9/screenshots/php.png
0207nobodyさん
2010/10/08(金) 20:05:54ID:vQ/FE4Nt次のプロジェクトはNetbeansで作ってみるかな。
0208nobodyさん
2010/10/08(金) 20:09:07ID:vQ/FE4Ntスキーマ書き換えると、lib下やらをリフレッシュしないといけないから
毎度毎度面倒なんだよね。
0209nobodyさん
2010/10/08(金) 23:30:00ID:???0210nobodyさん
2010/10/09(土) 01:22:13ID:???php symfony doctrine:build --all --and-load --no-confirmation
php symfony doctrine:data-load
php symfony cc
このへんはいけるけど、
symfony generate:module frontend hoge
なんかは対応できないよね?
スレチだけど。
0212nobodyさん
2010/10/09(土) 16:33:33ID:???0213nobodyさん
2010/10/10(日) 04:23:44ID:???レイアウト有り/無しのhtmlをファイルに保存するにはどうしたらいいですか?
wgetで取って保存、ってのは無しでお願いします。
0214nobodyさん
2010/10/10(日) 10:25:22ID:???0215nobodyさん
2010/10/10(日) 17:54:56ID:???いま開発環境ないPCだけど、Renderフィルター覗けばなんか分かりそうな気がしてきた。
0216nobodyさん
2010/10/10(日) 19:46:16ID:???prod環境でも第2引数を画面に表示するにはどうすればいい?
0217nobodyさん
2010/10/10(日) 21:13:44ID:???Table:
columns:
id:
name:
のように定義した状態で、
executeCreate内でnameフォームの値を取得するのに「$request->getParameter('name')」や「$form['name']->getValue()」
としてみたのですが、値が取得できません。
フォームの値を取り出すにはどのようにやればいいのでしょうか?
0218217
2010/10/10(日) 22:15:33ID:???$requestArray['name']
で取得できたんですけど、毎回こうやらないとダメなんでしょうか(汗)
0219nobodyさん
2010/10/11(月) 00:09:02ID:???SQL1回の発行で済ませて欲しいのに、2回実行されているようです。
なぜでしょうか?
#schema.yml
User:
columns:
id:
name:
Thread:
local: id
foreign: user_id
type: many
Thread:
columns:
id:
user_id:
relations:
User:
local: user_id
foreign: id
type: one
0220nobodyさん
2010/10/11(月) 00:10:20ID:???public function executeIndex(sfWebRequest $request)
{
$this->thread = Doctrine_Core::getTable('thread')
->createQuery('t')
->where('t.id',$request->getParameter('id'))
->leftJoin('t.User u')
->execute();
}
#indexSuccess.php
お名前は<?php echo $thread->getUser()->getName() ?>
似たような話題で、http://blog.asial.co.jp/591 も見てみたのですが、
バージョン違いなのか全く動きませんでした。
0221nobodyさん
2010/10/11(月) 01:17:59ID:???$this->thread = Doctrine_Core::getTable('thread')
->createQuery('t')
->where('t.id',$request->getParameter('id'))
->leftJoin('t.User u')
->execute();
$this->thread = Doctrine_Core::getTable('thread')
->createQuery('t')
->where('t.id = ?',$request->getParameter('id'))
->leftJoin('t.User u')
->fetchOne();
に変えたらどう?
0222nobodyさん
2010/10/11(月) 02:17:36ID:???SQLも新しく発行されていないようです。
ただ、$thread->getId() の構文が使えなくて $thread['id'] に全部書き換えないといけませんけど><
0223nobodyさん
2010/10/11(月) 02:55:20ID:???実際はfetchArray()で取得して、foreach()でループさせました。
とりあえずうまく行ったようです。
0224nobodyさん
2010/10/11(月) 20:37:48ID:???具体的には、CSRFチェックに引っかかったとき、自動的にhoge/newにリダイレクトさせたいんです。
0225nobodyさん
2010/10/12(火) 00:52:35ID:???sfErrorSchemaにでも、入ってるんじゃないの?
$form->getErrorSchema()だったかな?
0226nobodyさん
2010/10/13(水) 20:37:10ID:???0228nobodyさん
2010/10/14(木) 17:05:40ID:???すいません、そうゆう意味じゃないです。
たとえば、管理者が荒らし行為真っ最中のユーザーを見つけたら、
そいつのセッションやらクレデンシャルやらをクリアしてログアウトさせることをイメージしてました。
セッションにユーザーIDを入れておき、
全セッションファイルをトラバースして、
「id|i:(\d)+:123;」みたいにマッチしたファイルを削除すればいいかな?
symfony関係なくなっちゃうけど。。。
0229nobodyさん
2010/10/14(木) 17:34:03ID:???count()をやめて、execute()にして返ってきたDoctrineCorectionをcount()すると正しい件数が取得できます。
でも重いので、SQLのcount()でなんとか処理したいです。
public static function getLoginDays($id)
{
return LoginTable::getInstance()
->createQuery('l')
->select('DATE_FORMAT(l.created_at,"%Y-%m-%d") as days, count(*) as num')
->where('l.user_id = ?',$id)
->groupBy('DATE_FORMAT(l.created_at,"%Y-%m-%d")')
->orderBy('days')
->count();
}
#symfonyが発行したSQL
SELECT COUNT(*) AS num_results FROM log l WHERE l.user_id = '1' GROUP BY DATE_FORMAT(l.created_at, "%Y-%m-%d");
結果、日付の区別無しに、ログの総数が返ります。
0230nobodyさん
2010/10/14(木) 17:44:03ID:???DoctrineCorectionは、DoctrineCollectionの間違いでした^^;
0231nobodyさん
2010/10/14(木) 19:07:30ID:???それならis_active int(1)とかでフラグ項目をDBのユーザーテーブルに持たせておいて、公開側では
myUserの初期化で$dbuser->getIsActive()の値を調べて強制ログアウトさせればいいんじゃない?
強制ログアウトさせたいユーザーは、管理者が裏画面からis_activeの値を更新して強制ログアウト側に
落とす。
username password is_active
0232231
2010/10/14(木) 19:08:38ID:???username password is_active
testuser ****** 1 ⇒ログインできる
nguser ****** 0 ⇒ログインできない&強制ログアウト
0233nobodyさん
2010/10/14(木) 20:07:47ID:???0234229
2010/10/15(金) 17:53:24ID:???グループ化された日付が1つだけの場合、グループ化されていないままのレコード総数が返ります。
日付が複数の場合、正しい値が返ります。
0235nobodyさん
2010/10/15(金) 17:59:07ID:???public function __construct(sfEventDispatcher $dispatcher, sfStorage $storage, $options = array())
{
parent::__construct($dispatcher, $storage, $options);
}
って書かないとダメなのね。__construct()とだけ書いてちょっと泥沼になった。
0236nobodyさん
2010/10/15(金) 18:25:07ID:???$thisとかも見に行ってるんですか??
0237nobodyさん
2010/10/15(金) 21:08:43ID:???変数といってもDoctrine_Recordのオブジェクトが入ってる変数だったらものすごい量でて当たり前。
0238nobodyさん
2010/10/16(土) 17:14:44ID:JUO6sOS6formで隠したいパラメータ(from_id)をunsetしておいて、アクションで
> $message = new Message();
> $message['from_id'] = $this->getUser()->getAttribute('id');
> $form = new MessageForm($message);
とやる方法と、
formでunsetせずに
> $values = $this->getUser()->getAttribute($form->getName());
> $values['from_id'] = $this->getUser()->getAttribute('id');
> $form = $this->processForm($form, $values);
と上書きする方法の2通りがあると思うのですが、
どちらも安全でしょうか?
それとも、他に方法があるんでしょうか?
0239nobodyさん
2010/10/16(土) 20:04:03ID:JUO6sOS6$this->getUser()->setAttribute()した値が残ってるのですが、
これって普通ですか?
0241nobodyさん
2010/10/18(月) 18:54:39ID:3g1bUgIr下記のSQL文でコマンドラインでは動いてるんですが、
どのように記述すればよいのでしょうか?
SELECT w.target_user_id as user_id, DATE_FORMAT(w.created_at,"%Y-%m-%d") as days,w.type as type,count(*) as num FROM warn w
INNER JOIN (
SELECT target_user_id,count(*) AS datas
FROM warn GROUP BY target_user_id
) AS SUB USING(target_user_id)
GROUP BY user_id,days,type
ORDER BY datas DESC ,user_id ASC,days ASC,type ASC;
0242nobodyさん
2010/10/19(火) 02:27:53ID:0CIYXc+Uフォームの作成で下記のようなファイルが生成されます。
これが、ユーザー数が多くて、かつuser_idをunset()して使うケースではかなり無駄な気がします。
手作業でsetup()を上書きして、widgetをsfWidgetFormInputText、
validatorをsfValidatorIntegerに変える、という感じに書き換えたいのですが、
スキーマのオプションとかでsfWidgetFormDoctrineChoice()&$this->getRelatedModelName()を
使わないようにはできないんでしょうか?
$this->getRelatedModelName()の呼び出しは1回で済むはずなのに無駄なコードだし。。。
ユーザーが1万人になったら、フォームの表示のたびに2万件のレコード引っ張ってくるつもり?
abstract class BaseBlogForm extends BaseFormDoctrine
{
public function setup()
{
$this->setWidgets(array(
'id' => new sfWidgetFormInputHidden(),
'user_id' => new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('UserAccount'), 'add_empty' => false)),
));
$this->setValidators(array(
'id' => new sfValidatorChoice(array('choices' => array($this->getObject()->get('id')), 'empty_value' => $this->getObject()->get('id'), 'required' => false)),
'user_id' => new sfValidatorDoctrineChoice(array('model' => $this->getRelatedModelName('UserAccount'))),
));
0243nobodyさん
2010/10/19(火) 21:06:26ID:0CIYXc+Uが呼ばれるのはrender()の時だけ?
大ポカだった。
0244nobodyさん
2010/10/20(水) 16:50:03ID:mJZvzEeris_secure:true にした場合にログインページにforwardしてくれるのはいいのですが
認証成功後にforwardする前のページにredirectするにはどうすればいいでしょうか?
0245239
2010/10/21(木) 01:56:28ID:???認証情報はどこに保存されているんでしょう??
0246nobodyさん
2010/11/04(木) 18:06:43ID:kCotlNfKこれってSymfonyの問題ですか?
PHPも初心者なもんでどうすればいいのか分かりません。。。
0247nobodyさん
2010/11/06(土) 13:24:52ID:???0248nobodyさん
2010/11/07(日) 05:37:42ID:???0249nobodyさん
2010/11/08(月) 03:03:57ID:???以下の設定だけでは、変更できないんでしょうか?
#.htaccess
php_value session.gc_maxlifetime 86400
php_value session.gc_probability 1
php_value session.gc_divisor 100
#setting.yml
all:
user:
class: myUser
param:
timeout: 86400
0250nobodyさん
2010/11/08(月) 20:05:11ID:???user:
class: myUser
param:
timeout: 86400
こんな感じ
0251nobodyさん
2010/11/09(火) 20:43:10ID:???0252nobodyさん
2010/11/13(土) 05:16:41ID:???バックエンドで、is_super_adminなアカウントだけ閲覧を許可していんですけど
以下のsecurity.ymlでうまくいきません。クレデンシャルが違うんでしょうか?
index:
is_secure: true
credentials: admin
それと、新規登録時に
Notice: Undefined offset: 1 in D:\MyProject\symfony\lib\vendor\symfony\lib\config\sfGeneratorConfigHandler.class.php on line 68
という謎のエラーが出てしまいます。
sfGuardAuthに空のgenerator.ymlを作ると治るという情報があったのですが
治りませんでした。他に解決方法はありませんでしょうか?
0253nobodyさん
2010/11/13(土) 07:15:40ID:???credentails: [admin]
じゃなくて?
sfDoctrineGuardPlugin使ったことないからよくしらんけど
0254252
2010/11/13(土) 21:33:07ID:???http://www.symfony-project.org/blog/2008/11/12/call-the-expert-customizing-sfdoctrineguardplugin
を参考にしたAPP/congig/generator.ymlの変更をやめて、
中身を全部削除したらうまくいったみたい。
0255nobodyさん
2010/11/14(日) 02:59:13ID:???日付の比較がおかしくなっている感じがします。
スキーマはこんな感じです。
AccessLog:
tableName: access_log
actAs: { Timestampable: ~ }
columns:
user_id: varchar(50)
0256nobodyさん
2010/11/14(日) 03:01:31ID:???SELECT a.id, a.user_id, COUNT(*), DATE(a.created_at) AS date
FROM access_log a
WHERE (a.user_id = 'admin' AND a.created_at > '2010-11-01 00:00:00' AND a.created_at < '2010-11-29 23:59:59')
GROUP BY date ORDER BY a.created_at;
「->andWhere('a.created_at < ?',$end)」の行を抜かすと一応取得はできます。
原因はなんでしょうか?
$id = 'admin';
$start = "'2011-11-01 00:00:00'";
$end ="'2011-11-30 23:59:59'";
$this->accesslogs = Doctrine_Query::create()
->select('a.user_id, count(*) as count, DATE(a.created_at) as date')
->from('accesslog as a')
->where('a.user_id = ?',$id)
->andWhere('a.created_at > ?',$start)
->andWhere('a.created_at < ?',$end)
->groupBy('date')
->orderBy('a.created_at')
->execute();
0257nobodyさん
2010/11/14(日) 03:04:05ID:???AccessLog:
log1:
user_id: admin
created_at: '2010-11-13 21:56:54'
log2:
user_id: admin
created_at: '2010-11-13 21:56:54'
log3:
user_id: admin
created_at: '2010-11-14 21:56:54'
log4:
user_id: admin
created_at: '2010-11-14 21:56:54'
log5:
user_id: admin
created_at: '2010-11-15 21:56:54'
0258nobodyさん
2010/11/14(日) 19:32:35ID:???->from('accesslog as a')
じゃなくて
->from('accesslog a')
に変えると期待通りに動きました^^;
夜中3時間悩んだのに、昼に起きて5分で解決しました。
休憩や睡眠って大事ですね。みなさんもがんばってください。
なんで$endの行が無いときにうまくいったかは謎のままですが。。。
0259nobodyさん
2010/11/14(日) 23:36:38ID:???symfony慣れてないくせして導入してみたんだけど、symfonyとバージョン合ってないのかな?
sfGuardRememberMeFilterが機能してない気がする。
settings.ymlで
enabled_modules: [default, sfGuardGroup, sfGuardUser, sfGuardPermission, sfGuardAuth, sfGuardForgotPassword]
を記述しても、バックエンドに追加されてない。
sfGuardUserは手動でバックエンドに追加できるけど、sfGuardPermissionは足りないファイルがたんまり。ネットで拾ってきてもまともに動かない。
あと、save-fixtureしてリロードすると、パスワードがハッシュされてログインできなくなる。
このあたり、どうにかなりませんか?
0260nobodyさん
2010/11/15(月) 21:25:47ID:WH+q5o59Doctrineは単純なSQLだけで、複雑な合成はPHPでやったほうがいいのかな。
SELECT u.id as u__id,
u.username as u__username,
s.date as s__date,
a.access as a__access,
s.sales as s__sales
FROM sf_guard_user u
LEFT OUTER JOIN
(SELECT user_id,
DATE(created_at) AS date,
SUM(amount) AS sales
FROM sales
GROUP BY user_id, DATE(created_at)) s
ON u.username = s.user_id
LEFT OUTER JOIN
(SELECT user_id,
DATE(created_at) AS date,
count(*) AS access
FROM access_log
GROUP BY user_id, DATE(created_at)) a
ON u.username = a.user_id
AND s.date = a.date
WHERE u.username = 'admin'
AND s.date > '2010-11-01 00:00:00'
AND s.date < '2010-12-01 00:00:00'
ORDER BY s.date;
0261nobodyさん
2010/11/15(月) 23:40:15ID:???> 500 | Internal Server Error | Doctrine_Query_Exception
> The root class of the query (alias s) must have at least one field selected.
ユーザー毎の売上げを集計したいだけなんだけど。。。
#action.php
public function executeSalelist(sfWebRequest $request)
{
$this->saless = Doctrine_Query::create()
->select('s.user_id as id, p.name, sum(s.amount) as amount')
->from('Sales s')
->leftJoin('s.Profile p')
->groupBy('id')
->execute();
}
0262261
2010/11/15(月) 23:41:34ID:???Sales:
tableName: sales
actAs: { Timestampable: ~ }
columns:
user_id:
type: integer
amount: integer
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
Profile:
class: sfGuardUserProfile
foreign: user_id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
0263nobodyさん
2010/11/16(火) 03:02:08ID:???> $this->setWidget('user_id', new sfWidgetFormDoctrineChoice(array('model' => $this->getRelatedModelName('User'))));
フォームのプルダウンでuser_id=0のアカウントを選択してポストすると、
user_id=1として格納されてしまいます。
なんで〜??
0264nobodyさん
2010/11/16(火) 03:53:30ID:???0265261
2010/11/16(火) 13:36:35ID:???Profileがおかしいのかな?
Sales:
tableName: sales
actAs: { Timestampable: ~ }
columns:
user_id:
type: integer
amount: integer
relations:
User:
class: sfGuardUser
foreign: id
local: use_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Sales
Profile:
class: sfGuardUserProfile
foreign: user_id
local: user_id
type: many
onDelete: cascade
foreignType: many
foreignAlias: Profile
0266261
2010/11/16(火) 13:38:26ID:???tableName: sf_guard_user_profile
actAs: { Timestampable: ~ }
columns:
id: integer
user_id:
type: integer
primary: true
bank_name: varchar(50)
bank_point: varchar(50)
bank_type:
type: enum
values: [ordinary, current]
default: ordinary
name: varchar(50)
bank_number: varchar(50)
relations:
User:
class: sfGuardUser
foreign: id
local: user_id
type: one
onDelete: cascade
foreignType: one
foreignAlias: Profile
0267nobodyさん
2010/11/16(火) 21:13:48ID:???スキーマでは user_id(type:integer) にリレーションしてるんだけど、
フォームでは user_name(type:varchar(255)) で入力したい場合はどうすればいいですか?
■ このスレッドは過去ログ倉庫に格納されています