悩んでること、内容
ソースを読んでもどのような処理をしているか理解できないため、教えて欲しいです。
変数にsessionを使った処理を代入しています。
sessionで変数にデフォルト値を指定しました。(ここもあっているか不安です。)
その後にforeachで配列にsessionが入っている変数を下記ソースのように指定しました。
これはどのような処理をしているのでしょうか?
該当のソースコード
$id = $request->input('deletecheck', ''); //deletecheck=チェックボックスにチェックを入れたときに、値に対応するsqlに保存されているid番号
$sql = '';
$user = session('user', array()); //'user'にarray()を入れてデフォルト値にする。
$del_data = array();
$sql = 'update bangumi_mst set delete_flg = 1, '
. 'modified_by = ?, modified = GETDATE() where id = ?'; //modified_by=修正者、modified=修正日
foreach ($id as $key => $val) {
$del_data = array(
$user['name'], //ここが理解できません。nameというのはログインユーザみたいなものです。
$val,
);
if (DB::update($sql, $del_data) != 1) {
throw new Exception('update error');
}
}
私なりに考えた解釈
$user=修正者($sqlに入っている「modified_by = ?」の?に該当する。)上で$userにはデフォルト値でarray()が設定されているので$userには配列が入る。なので['name']を指定しているということは、渡ってきたログインユーザの値が入る。
と、投げやりな感じで考えたのでなんだかすっきりしません。
いろいろ調べたのですが答えが見つからなかったので教えてください。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
ライブラリ次第ですが、おそらく$userにログインユーザーの情報が入っていて
$user["name"]とIDの組み合わせがDBの権限とリンクしている
その上でユーザーによるDBのupdate権限をチェックし1でない
つまりtrueじゃない=update権限をもっていない・・・のであれば
例外「update error」を発生させて処理をとばしている
と考えればいいでしょう。
通常はupdate権限はユーザーにつけるので$idを比較対象にいれるはどうかと思います
実際にはレコードごとに作成者IDをつけて自分の作成したレコードは
updateやdeleteができるようにし、あとは管理者グループをつくっておいて
ユーザーIDが管理者グループにいれば更新可能とするような管理方法でしょう
レコードごとに何個も更新・削除権限を細かくつけるのは煩雑ですしね
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
Laravelなのに何このコード…。
array()とかSQLを直接書いてるとかあまりにもひどすぎてどうしようもないのでは…。
どこか別の場所でセッションに設定
session(['user' => [
'name' => 'foo',
]]);
これは設定しているのではなく取得。array()は上で設定してなかった場合に使われるデフォルト。
$user = session('user', array());
設定してれば$userは['name' => 'foo']
なので$user['name']はこれを使っているだけ。
そもそもLaravelでこんな作りしてるのがおかしいけど。
普通に作ればユーザー情報はauth()->user()
から取得して使う。
Laravel使っててもこれとか他人のプロジェクトには関われないな…。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
おおよそ質問者さんの想定している通りと思います。
Laravelの提供している機能なので、そちらのマニュアルを読まれた方が理解が進むと思います。
マニュアルを読んでも理解が進まない場合は、フレームワークのコア部分を読み進めていくと良いのではないでしょうか。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.22%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2018/03/09 14:06
foreach にかけられている$idってどこからくるもので何が入っているのでしょうか。
m.ts10806
2018/03/09 14:09 編集
と、いうか自身が書いたソースではないんですか?「指定しました」とありますがその後に「どのような処理をしているのでしょうか?」とあるのが疑問です。どこからから引っ張ってきたソースなのであれば参照先・出展先も明記してください。
darichia
2018/03/09 14:22
ソース付け足しました。自分で書いたものですが、会社の上司に教わりながら書きました。ですが理解できずにいたので質問いたしました。説明足らずで申し訳ありませんがご教示お願い致します。
m.ts10806
2018/03/09 14:24
うーん良くないですね。教わりながらでも意味を理解しながら教わるのと、ただ書くのとでは今後の理解度や成長度に大きく関わります。
m.ts10806
2018/03/09 14:25
足りない部分を想像して補完して回答するのは簡単ですが・・・。
darichia
2018/03/09 14:27
私もいけないと思い今解読をしている最中です。ですが、ここだけ考えても理解できませんでした...ぜひ教えてください。
m.ts10806
2018/03/09 14:31
その上司にどこまで聞くことができるのでしょうか?session()、DB::update()、$request->input()はPHPデフォルトで用意されている関数にはありませんし、何かしらのフレームワーク(ミニマム・オレオレ含めて)であればどんなものを利用しているかは、これだけでは分かりませんし。
darichia
2018/03/09 14:34
laravelを使用しています。
m.ts10806
2018/03/09 14:36
失礼しました。タグにありましたね。session()についても了解です。