回答編集履歴

4

修正

2018/04/11 19:26

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -3,6 +3,10 @@
3
3
 
4
4
 
5
5
  当たり前だと思います。 `favoliting` というリレーションメソッドが定義されていたらリレーションプロパティの名前も `favoliting` が正しいです。 `is_favoliting` ではありません。
6
+
7
+
8
+
9
+ しかも, `favoliting` はリレーションメソッドじゃないですね。この中でリレーションメソッドは `favolites` ただ1つしかありません。ほかのメソッドはプロパティ形式ではアクセスできません。普通にメソッドとして実行してください。(但しプロパティのように結果はキャッシュされません,その都度実行されます)
6
10
 
7
11
 
8
12
 

3

おまけ

2018/04/11 19:26

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -15,3 +15,69 @@
15
15
 
16
16
 
17
17
  英語的には `favoliting` じゃなくて `favoriting` じゃないですかね…
18
+
19
+
20
+
21
+ 詳細よく分かんないんですが,もし「ユーザがユーザをお気に入りに入れる」という関係であれば,私なら以下のように書くと思います。(カラム名もそれに合わせて変えます)
22
+
23
+
24
+
25
+ ```php
26
+
27
+ class User extends Model
28
+
29
+ {
30
+
31
+ public function favorites()
32
+
33
+ {
34
+
35
+ return $this->belongsToMany(User::class, 'favorites', 'source_user_id', 'target_user_id')->withTimestamps();
36
+
37
+ }
38
+
39
+
40
+
41
+ public function favorite(User $user)
42
+
43
+ {
44
+
45
+ if ($this->id === $user->id) {
46
+
47
+ return false;
48
+
49
+ }
50
+
51
+ return (bool)$this->favorites()->syncWithoutDetaching([$user->id])['attached'];
52
+
53
+ }
54
+
55
+
56
+
57
+ public function unfavorite(User $user)
58
+
59
+ {
60
+
61
+ if ($this->id === $user->id) {
62
+
63
+ return false;
64
+
65
+ }
66
+
67
+ return (bool)$this->favorites()->detach([$user->id]);
68
+
69
+ }
70
+
71
+
72
+
73
+ public function favoriting(User $user)
74
+
75
+ {
76
+
77
+ return $this->favorites()->wherePivot('target_user_id', $user->id)->exists();
78
+
79
+ }
80
+
81
+ }
82
+
83
+ ```

2

修正

2018/04/11 19:22

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -14,4 +14,4 @@
14
14
 
15
15
 
16
16
 
17
- 英語的には `favoliting` じゃなくて `favorited` じゃないですかね…
17
+ 英語的には `favoliting` じゃなくて `favoriting` じゃないですかね…

1

補足

2018/04/11 19:11

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -14,4 +14,4 @@
14
14
 
15
15
 
16
16
 
17
- `favoliting` じゃなくて `favorited` じゃないですかね…
17
+ 英語的には `favoliting` じゃなくて `favorited` じゃないですかね…