草庐IT

php - Laravel Eloquent 多对多附加

coder 2023-10-03 原文

我是 laravel 的新手,正在尝试用它制作相册。 我的问题是我使用附加功能将用户 ID 和组 ID 插入到我的数据库中,它工作正常,但在文档中它说了关于附加功能

For example, perhaps the role you wish to attach to the user already exists. Just use the attach method:

所以我想以同样的方式使用它,如果 album_id 已经存在就更新它,否则插入新的,但我的问题是它总是 inssters,它不检查是否album_id 已经存在

我的模型

class User extends Eloquent 
{
    public static $timestamps = false;

    public function album()
    {
        return $this->has_many_and_belongs_to('album', 'users_album');
    }

}

后置函数

public function post_albums()
    {

      $user = User::find($this->id);

      $album_id = Input::get('album');

      $path = 'addons/uploads/albums/'.$this->id.'/'. $album_id . '/';

      $folders = array('path' => $path, 'small' => $path. 'small/', 'medium' => $path. 'medium/',  );

      if (! is_dir($path) ) 
      {
         foreach ($folders as $folder) 
         {
            @mkdir($folder, 0, true);
         }
      }


     $sizes = array( 
        array(50 , 50 , 'crop', $folders['small'], 90 ), 
        array(164 , 200 , 'crop', $folders['medium'], 90 ), 
     );

     $upload = Multup::open('photos', 'image|max:3000|mimes:jpg,gif,png',  $path)
             ->sizes( $sizes )
             ->upload();

     if($upload) 
     {
        $user->album()->attach($album_id);
        return Redirect::back();
     } 
     else 
     {
        // error show message remove folder
     }   

   }

有人可以指出我做错了什么吗?或者我完全误解了附加功能?

最佳答案

我相信您误解了附加功能。 sync 函数使用附加来添加关系,但前提是该关系尚不存在。按照那里所做的,我建议拉出一个 id 列表,然后仅在列表中尚不存在时才插入。

$current = $user->album()->lists( 'album_id' );
if ( !in_array( $album_id, $current ) )
{
    $user->album()->attach( $album_id );
}

附带说明一下,我建议您遵循 laravel 的默认命名约定。关系方法应该是$user->albums() 因为有很多。数据透视表也应命名为“album_user”。稍后您会感谢自己。

关于php - Laravel Eloquent 多对多附加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15564878/

有关php - Laravel Eloquent 多对多附加的更多相关文章

  1. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  2. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  3. ruby-on-rails - ruby:将数组的每个元素用附加引号引起来 - 2

    我有以下字符串:a="001;Barbara;122"我拆分成字符串数组:names=a.split(";")names=["001","Barbara","122"]我应该怎么做才能将每​​个元素另外用''引号括起来?结果应该是names=["'001'","'Barbara'","'122'"]我知道这听起来很奇怪,但我需要它在ruby​​onrails中进行数据库查询。出于某种原因,如果我的名字在“”引号中,我将无法访问数据库记录。我在数据库中确实有mk1==0006但rails不想以某种方式访问​​它。但是,它确实访问1222。sql="SELECTmk1,mk2,pk1,pk

  4. ruby-on-rails - 如何添加具有额外列的多对多记录 - 2

    我有以下模型用户has_many:users_contactshas_many:contacts,through::users_contactsaccepts_nested_attributes_for:contacts,allow_destroy:true联系方式has_many:users_contactshas_many:users,through::users_contactsaccepts_nested_attributes_for:users_contacts,allow_destroy:true用户联系belongs_to:usersbelongs_to:contacts

  5. ruby - 如何在 Ruby 中创建数字列表并将其反向附加到它 - 2

    给定一个最小整数和最大整数,我想创建一个数组,它从最小值到最大值以二为单位计数,然后倒退(再次以二为单位,重复最大数)。例如,如果最小数是1,最大数是9,我想要[1,3,5,7,9,9,7,5,3,1].我试图尽可能简洁,这就是我使用单行代码的原因。在Python中,我会这样做:range(1,10,2)+range(9,0,-2)在我刚刚开始学习的Ruby中,到目前为止我所想到的是:(1..9).inject([]){|r,num|num%2==1?r这行得通,但我知道必须有更好的方法。这是什么? 最佳答案 (1..9).step

  6. ruby - 为什么 `<<` 附加到 Ruby 字符串而 `+=` 不附加? - 2

    这个问题在这里已经有了答案:ArestringsmutableinRuby?(3个答案)WhenpassingaRubyarrayasanargument,whydoes`(2个答案)关闭8年前。我正在学习教程,我想了解为什么会出现以下情况:original_string="Hello,"hi=original_stringthere="World"hi+=thereassert_equal"Hello,",original_stringoriginal_string="Hello,"hi=original_stringthere="World"hi为什么+=对original_str

  7. ruby - 给定一个 Ruby 元类,我如何获取它所附加的实例? - 2

    这是问题“GivenaninstanceofaRubyobject,howdoIgetitsmetaclass?”的反面您可以在默认的to_s输出中看到附加元类或单例类的对象的表示:s="hello"s_meta=class"#>"classC;endc_meta=class"#"是否有可能实现一个方法Class.attached来返回这个对象(如果接收者是一个普通类,则返回nil)?s_meta.attached#=>sc_meta.attached#=>CC.attached#=>nil 最佳答案 有一个丑陋的(但有效的)黑客,

  8. ruby - 附加具有唯一值的收集数组 - 2

    所以我有一个由collect构建的数组。@a=Relation.where(part:"v04")@relations=@a.collect{|x|x.car}构建..=>["f03","f04"]@a=Relation.where(part:"v03")@relations=@a.collect{|x|x.car}构建..=>["f01","f03"]我想要的是追加收集,这样我就可以从v03和v04构建一个数组,它看起来像这样。=>["f03","f04","f01","f03"]然后只保留唯一值,所以它看起来像这样。=>["f03","f04","f01"]取出f03,因为它列出了

  9. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

  10. ruby - Datamapper 中多对多关系的战略性预加载? - 2

    我正在使用DataMapper,一个用于ruby​​的开源ORM,我很想抓挠。目前,DataMapper可以对一对多关系使用StrategicEagerLoading(SEL),但不能对发生N+1查询的多对多关系使用。我想设法让这项工作正常进行,但我找不到在哪里做。所以两部分问题:如何运行测试套件,以便它显示失败(注意,现在所有应该失败的规范都标记为待定)?在何处以及如何为一对多关系实现SEL? 最佳答案 对于第二个问题,您可以尝试深入研究代码:/lib/dm-core/associations/relationship.rb#Ea

随机推荐